Java/Java8
(JAVA8) 함수형 인터페이스와 람다 표현식 (2)
주누
2020. 7. 7. 23:22
https://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html
Java가 기본으로 제공하는 함수형 인터페이스
- java.lang.funcation 패키지
- 자바에서 미리 정의해둔 자주 사용할만한 함수 인터페이스
- Function <T, R>
- BiFunction <T, U, R>
- Consumer <T>
- Supplier <T>
- Predicate <T>
- UnaryOperator <T>
- BinaryOperator <T>
Function <T, R>
- T 타입을 받아서 R 타입을 리턴하는 함수 인터페이스
- R apply(T t)
Function<Integer, Integer> plus5 = (i) -> i+5;
위처럼 클래스를 생성하여 사용해도 되지만 람다 표현식을 사용하여 바로 구현이 가능하다.
Function<Integer, Integer> plus5 = (integer -> {
return integer+5;
});
- 함수 조합용 메서드
- andThen
- compose
*2 연산 후 결과 값에 대해서 +10
Function<Integer, Integer> plus5 = (i) -> i+5;
Function<Integer, Integer> multiply2 = (i) -> i*2;
Function<Integer, Integer> multiply2AndPlus5 = plus5.compose(multiply2);
System.out.println(multiply2AndPlus5.apply(2));
+10 연산 후 결과 값에 대해서 *2
Function<Integer, Integer> plus5AndMultiply2 = plus5.andThen(multiply2);
System.out.println(plus5AndMultiply2.apply(5));
BiFunction <T, U, R>
- 두 개의 값(T, U)을 받아서 R 타입을 리턴하는 함수 인터페이스
- R apply(T t, U u)
Consumer <T>
- T 타입을 받아서 아무 값도 리턴하지 않는 함수 인터페이스
- void Accept(T t)
- 함수 조합용 메서드
- andThen
Consumer<Integer> printT = (i) -> System.out.println(i);
printT.accept(3);
Supplier <T>
- T 타입의 값을 제공하는 함수 인터페이스
- T get()
Supplier<Integer> get10 = () -> 10;
System.out.println(get10.get());
Predicate <T>
- T 타입을 받아서 boolean을 리턴하는 함수 인터페이스
- boolean test(T t)
- 함수 조합용 메서드
- And
- Or
- Negate
Predicate<String> startsWithJunwoo = (s) -> s.startsWith("junwoo");
Predicate<Integer> isEven = (i) -> i%2 == 0;
System.out.println(startsWithJunwoo.test("djflkjflkdf"));;
System.out.println(startsWithJunwoo.test("junwoo"));
UnaryOperator <T>
- Function <T, R>의 특수한 형태로, 입력값 하나를 받아서 동일한 타입을 리턴하는 함수 인터페이스
Function<Integer, Integer> plus5 = (i) -> i+5;
입력 값의 타입과 결과 값의 타입이 같은 경우 아래와 같이 변형 가능 (입력 값이 하나인 경우)
UnaryOperator<Integer> plus11 = (i) -> i+11;
BinaryOperator <T>
- BiFunction <T, U, R>의 특수한 형태로, 동일한 타입의 입력값 두 개를 받아 리턴하는 함수 인터페이스
BiFunction <T, U, R> -> BinaryOperator <T>
Code Link
https://github.com/mike6321/PURE_JAVA/tree/master/java8to11/src/main