람다의 합성과 결합?
함수형 인터페이스를 구현한 람다식 몇가지를 합성하거나 결합하는게 가능하다.
합성은 여러 기능을 합치는 것을 뜻하고
결합은 논리 연산자의 &&(and), ||(or), !(not)을 뜻한다.
합성
메소드 | 설 명 |
andThen() | 함수 f, g가 있다고 했을때 f.andThen(g)는 f를 적용 후 g를 적용한다. |
compose() | 함수 f, g가 있다고 했을때 f.andThen(g)는 g를 적용 후 f를 적용한다. |
identity() | 함수를 적용하기 이전과 이후가 동일한 '항등 함수'가 필요할 때 사용한다. (1을 넣으면 1이 나옴) |
결합
메소드 | 설 명 |
and() | 그리고 의 의미로 논리연산자 '&&'와 동일하다. |
or() | 또는 의 의미로 논리연산자 '||'와 동일하다. |
negate() | 부정의 의미로 논리연산자 '!'와 동일하다. |
isEqual() | 두 대상을 비교 한다. |
andThen()
Function<Integer, Integer> f = i -> i*i;
Function<Integer, Integer> g = i -> i+2;
//f함수를 먼저 실행 하고 g를 실행한다.
Function<Integer, Integer> h = f.andThen(g);
System.out.println(h.apply(5)); // 5*5+2 가 된다.
27
compose()
Function<Integer, Integer> f = i -> i*i;
Function<Integer, Integer> g = i -> i+2;
//g함수를 먼저 실행 하고 f를 실행한다.
Function<Integer, Integer> h = f.compose(g);
System.out.println(h.apply(5)); // 7*7이 된다.
49
identity()
Function<String, String> f = Function.identity();
System.out.println(f.apply("A"));
A
and(), or(), negate()
Predicate<Integer> p = i -> i < 100;
Predicate<Integer> q = i -> i < 200;
Predicate<Integer> r = i -> i%2 == 0;
Predicate<Integer> notP = p.negate();
Predicate<Integer> all = notP.and(q.or(r));
System.out.println(all.test(150));
true
.isEqual()
String str1 = "ABC";
String str2 = "ABC";
Predicate<String> p2 = Predicate.isEqual(str1);
boolean result = p2.test(str2);
System.out.println(result);
true
댓글