- 람다 함수는 함수형 프로그래밍에서 중요한 개념 중 하나로, 익명 함수(anonymous function)라고도 함.
- 이름이 없는 함수로, 일반적으로 함수를 한 번만 사용하거나 함수를 인자로 전달해야 하는 경우에 유용하게 사용됨.
ㅤ
//Predicate <T> : boolean test (T t)
//BiPredicate<T, R> : boolean test(T t, U u)
import java.util.function.BiPredicate;
import java.util.function.Predicate;
public class PredicateTest {
public static void main(String[] args) {
//매개변수로 전달된 수가 짝수면 리턴 true
// (리턴문 지우면 중괄호 생략 가능)
//Predicate<Integer> p1 = (num) -> {return num % 2 == 0;};
Predicate<Integer> p1 = (num) -> num % 2 == 0;
System.out.println(p1.test(2));
//매개변수로 전달된 두 정수의 합이 짝수면 리턴 true
BiPredicate<Integer, Integer> p2 = (a, b) -> (a + b) % 2 == 0;;
System.out.println(p2.test(10, 10));
//두 정수가 매개변수로 들어가고, 두 수의 합이 짝수면 리턴 true
ccc(10, 20, p2);
//BiPredicate 안의 test 메소드 기능이 그대로 들어옴
//(aaa)
ccc(10, 20, (num1, num2) -> num1 + num2 < 10);
//bbb
ccc(10, 20, (num1, num2) -> num1 == num2);
}
//메소드 구현 -> 람다식에 넣기
//public boolean test(Integer num){
//return num % 2 == 0;
// }
//두 정수를 매개변수로 받아 합이 10보다 작으면 리턴 true
public static boolean aaa(int num1, int num2){
return num1 + num2 < 10;
}
//두 정수를 매개변수로 받아 두 수가 같으면 리턴 true
public static boolean bbb(int num1, int num2){
return num1 == num2;
}
public static boolean ccc(int num1, int num2, BiPredicate<Integer, Integer> p){
return p.test(num1, num2);
}
}
Supplier<T>
- 입력 없이 결과를 반환하는 함수를 정의
- T get( ) 메서드를 가지며, 이 메서드는 아무런 매개변수를 받지 않고 결과 T를 반환함. 주로 입력 받는 방식을 결정해 파라미터 없이 특정 결과를 생성하는데 사용됨.
- Supplier를 활용하면 추상메서드 get( )을 통해 Lazy Evalution 가능
- Lazy Evalution란?
불필요한 연산을 피하기 위해 연산을 지연시키는 행위
import java.util.function.Supplier;
//Supplier<T> : T get()
public class SupplierTest {
public static void main(String[] args) {
//1~10까지의 수 중 랜덤한 정수를 리턴
Supplier<Integer> s1 = () -> {
int rand = (int)(Math.random() * 10 + 1);
return rand;
};
int r1 = s1.get();
System.out.println(r1);
}
}
🔍 참조
- https://hstory0208.tistory.com/entry/Java-함수형-인터페이스란-활용-방법에-대해-알아보자 [< Hyun / Log >:티스토리]