λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ–₯️/Java

[Java] λžŒλ‹€(Lambda) ν‘œκΈ°λ²•

by HanaV 2023. 3. 21.
728x90

λžŒλ‹€ ν‘œκΈ°λ²•μ΄λž€! λ©”μ†Œλ“œλ₯Ό μ„ μ–Έν•˜κ±°λ‚˜ 인자λ₯Ό λ°›μ•„μ˜€λŠ” λ“±μ˜ ν”„λ‘œκ·Έλž˜λ°μ„ ν•  λ•Œ, λ°˜λ³΅λ˜λŠ” μš”μ†Œλ₯Ό μ΅œλŒ€ν•œ μ€„μ—¬μ„œ ν”„λ‘œκ·Έλž¨ μ†ŒμŠ€ 길이λ₯Ό μ€„μ΄λŠ” λͺ©μ μœΌλ‘œ λ§Œλ“€μ–΄μ§„ ν‘œκΈ°λ²•μ΄λ‹€. ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ΄ μ‘°κΈˆμ”© μ‚¬μš©λ¨μ— 따라 μ‚¬μš© λΉˆλ„κ°€ μ¦κ°€ν•˜μ˜€λ‹€. λžŒλ‹€ν‘œκΈ°λ²•μ„ μ‚¬μš©ν•˜λ©΄ κ°„λ‹¨ν•˜κ²Œ ->둜 μ½”λ“œμ˜ 길이λ₯Ό ν™• 쀄일 수 μžˆλ‹€.

 

1. λžŒλ‹€μ‹μ„ μ΄μš©ν•œ 읡λͺ…ν•¨μˆ˜

1-1. μΈμžκ°€ 2개인 경우

@FunctionalInterface
interface MyLambdaFunction {
    int sum(int a, int b);
}

public class LambdaExample {
    public static void main(String[] args) {

        //2개의 인자λ₯Ό λ°›μ•„μ„œ 계산 ν›„ λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜λ₯Ό λžŒλ‹€ν‘œκΈ°λ²•μ„ 생성
        MyLambdaFunction myLambdaFunction = (int a, int b) -> a + b; //(인자) -> (리턴값);
        System.out.println("λžŒλ‹€μ‹μ„ μ΄μš©ν•œ 읡λͺ…ν•¨μˆ˜:  " + myLambdaFunction.sum(3, 5));
    }
}

console

λžŒλ‹€μ‹μ„ μ΄μš©ν•œ 읡λͺ…ν•¨μˆ˜:  8

 

1-2. μΈμžκ°€ μ—†λŠ” 경우

@FunctionalInterface
interface MyPrint {
    String printLambda();
}

public class LambdaExample {
    public static void main(String[] args) {

        //인자 없이 결과값을 λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜λ₯Ό λžŒλ‹€ν‘œκΈ°λ²•μ„ 생성
        MyPrint myPrint = () -> "Hello World";
        System.out.println("λžŒλ‹€μ‹μ„ μ΄μš©ν•œ 읡λͺ…ν•¨μˆ˜ = " + myPrint.printLambda());

    }
}

console

λžŒλ‹€μ‹μ„ μ΄μš©ν•œ 읡λͺ…ν•¨μˆ˜ = Hello World

 

 

2. ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€ μ‚¬μš©ν•˜κΈ°

2-1. Suplier: λ§€κ°œλ³€μˆ˜ 없을 λ•Œ

import java.util.function.Supplier;

public class LambdaExample {
    public static void main(String[] args) {

        //1. Supplier: λ§€κ°œλ³€μˆ˜ 없이 λ°˜ν™˜κ°’λ§Œ κ°–λŠ” ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜λŠ” 방법
        Supplier<String> supplier = () -> "Hello everyone";
        System.out.println("λ§€κ°œλ³€μˆ˜ 없이 λ°˜ν™˜κ°’λ§Œ κ°–λŠ” ν•¨μˆ˜ = " + supplier.get());
    }
}

console

λ§€κ°œλ³€μˆ˜ 없이 λ°˜ν™˜κ°’λ§Œ κ°–λŠ” ν•¨μˆ˜ = Hello everyone

 

2-2. Consumer

import java.util.function.Consumer;

public class LambdaExample {
    public static void main(String[] args) {

        //2. Consumer: 객체 Tλ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ λ°›μ•„μ„œ μ‚¬μš©ν•˜κ³  λ°˜ν™˜κ°’μ€ μ—†λŠ” ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜λŠ” 방법
        Consumer<String> consumer = (s) -> System.out.println(s.split(" ")[0]);
        consumer.accept("Hello doNotPrint"); //λ§Œλ“  ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄μ„œ μ‹€ν–‰
    }
}

console

Hello

andThen μ•ˆμ— μ‚¬μš©ν•  수 μžˆλŠ” ν‘œκΈ°λ²•

consumer.andThen(System.out::println).accept("Hello");//λ©”μ†Œλ“œ 참쑰에 λŒ€ν•œ λžŒλ‹€ ν‘œκΈ°λ²•

 

2-3. Function : T -> R

import java.util.function.Function;

public class LambdaExample {
    public static void main(String[] args) {

        //3. Function: 객체 Tλ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ λ°›μ•„μ„œ μ²˜λ¦¬ν•œ ν›„, R둜 λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€ μ‚¬μš©ν•˜λŠ” 방법
        Function<String, Integer> function = str -> str.length(); //ν•¨μˆ˜ 생성
        System.out.println("Hello World의 κΈΈμ΄λŠ” " + function.apply("Hello World"));

    }
}

console

Hello World의 κΈΈμ΄λŠ” 11

 

2-4. Predicate : Boolean κ°’μœΌλ‘œ λ°˜ν™˜

import java.util.function.Predicate;

public class LambdaExample {
    public static void main(String[] args) {

        //4. Predicate: 객체 Tλ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ λ°›μ•„ μ²˜λ¦¬ν•œ ν›„, Boolean으둜 λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜λŠ” 방법
        Predicate<String> predicate = s -> s.equals("Hello World"); //ν•¨μˆ˜ 생성
        System.out.println("Hello World와 κ°™λ‚˜μš”? " + predicate.test("Hello World"));
        System.out.println("Hello World와 κ°™λ‚˜μš”? " + predicate.test("Hello My World"));

    }
}

console

Hello World와 κ°™λ‚˜μš”? true
Hello World와 κ°™λ‚˜μš”? false

 

*str s λŠ” μž„μ˜μ˜ λ³€μˆ˜

*(s) -> ... μ—μ„œ (s) κ΄„ν˜Έλ₯Ό 빼도 싀행이 됨

728x90

"); wcs_do();