본문 바로가기
JAVA BASE/Lambda&Stream(람다와 스트림)

04. [자바] 람다식의 합성과 결합

by staticClass 2021. 1. 13.

람다의 합성과 결합?

함수형 인터페이스를 구현한 람다식 몇가지를 합성하거나 결합하는게 가능하다.

합성은 여러 기능을 합치는 것을 뜻하고

결합은 논리 연산자의 &&(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

댓글