Function<T, R>
T타입을 받아서 R타입을 리턴하는 함수형 인터페이스
함수 조합용 메소드 : andThen, compose
[예제]
compose는 (...)안의 람다식을 먼저 계산한다.
andThen은 plus를 먼저 계산하고 (...)안의 람다식을 계산한다.
Function<Integer, Integer> plus = (num) -> num + 5;
Function<Integer, Integer> multiply = (num) -> num * 2;
Function<String, String> world = (s) -> s + " world";
System.out.println(plus.apply(5)); // 10
System.out.println(multiply.apply(5)); // 10
System.out.println(world.apply("hello")); // hello world
// compose
Function<Integer, Integer> mulAndPlus = plus.compose(multiply);
System.out.println(mulAndPlus.apply(5)); // 15
// andThen
Function<Integer, Integer> plusAndMul = plus.andThen(multiply);
System.out.println(plusAndMul.apply(5)); // 20
BiFunction<T,U,R>
두 개의 값(T,U)를 받아서 R타입을 리턴하는 함수 인터페이스
BiFunction<Integer, Integer, Integer> plus = (num1, num2) -> num1 + num2;
System.out.println(plus.apply(5, 1)); // 6
Consumer<T>
T 타입을 받아서 아무것도 리턴하지 않는 함수 인터페이스
Consumer<String> print = s -> System.out.println(s + hello World");
print.accept("KIM");
Predicate<T>
- T 타입을 받아서 boolean을 리턴하는 함수 인터페이스
- boolean test(T t)
- And, or, Negate
Predicate<Integer> isEven = n -> n % 2 == 0;
System.out.println(isEven.test(2));
System.out.println(isEven.test(3));
BinaryOperator<T>
같은 타입의 값 2개를 받아서 리턴하는 함수 인터페이스
BinaryOperator<Integer> plus = (n1, n2) -> n1 + n2;
System.out.println(plus.apply(5, 10));
Supplier<T>
T타입의 값을 제공하는 함수 인터페이스로 Lazy Evaluation에 사용된다. Lazy Evaluation의 경우 설명이 길어지니 다음의 포스팅을 참고하자.