Java/Java8

(JAVA8) 함수형 인터페이스와 람다 표현식 (2)

주누 2020. 7. 7. 23:22

https://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html

 

java.util.function (Java Platform SE 8 )

Interface Summary  Interface Description BiConsumer Represents an operation that accepts two input arguments and returns no result. BiFunction Represents a function that accepts two arguments and produces a result. BinaryOperator Represents an operation u

docs.oracle.com

Java가 기본으로 제공하는 함수형 인터페이스

  • 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

 

mike6321/PURE_JAVA

Contribute to mike6321/PURE_JAVA development by creating an account on GitHub.

github.com