java.util.function 패키지
1. java.util.function 패키지
- 이 패키지에는 일반적으로 자주 쓰이는 형식의 메서드를 함수형 인터페이스로 미리 정의해 놓았다.
- 아래는 대표적 5가지 함수형 인터페이스이다.
(1) java.lang.Runnable
: 매개변수와 반환값이 없다.
<void run()>
(2) Supplier<T>
: 매개변수가 없고, 반환값만 있다.
<T get()>
(3) Consumer<T>
: 매개변수만 있고, 반환값은 없다.
<void accept(T t)>
(4) Function<T,R>
: 일반적인 함수로 하나의 매개변수를 받아서 결과를 반환한다.
<R apply(T t)>
(5) Predicate<T>
: 조건식을 표현하는데 사용된다.
: 매개변수는 하나, 반환타입은 boolean이다.
: 반환타입이 boolean인 것을 제외하면 (4) Function과 동일하다.
<boolean test(T t)>
- 매개변수가 두 개인 함수형 인터페이스는 Consumer, Predicate, Function 앞에 'Bi'를 붙이면
된다.
1-1. Predicate를 이해하기 위한 예제(1)
: 간단하게 s변수에 문자열이 비어있는지 없는지 boolean을 통해 알아보는 예제이다.
2. 컬렉션 프레임웍과 함수형 인터페이스
- 컬렉션 프레임웍의 인터페이스에 다수의 디폴트 메서드가 추가되었는데,
그 중의 함수형 인터페이스를 사용한다.
( 자세한 메서드 내용은 804p를 참고한다. )
2-1. 컬렉션 프레임웍과 함수형 인터페이스를 이해하기 위한 예제(1)
: 아래의 예제는 이전의 사용했던 컬렉션 프레임웍에서 람다식을 이용한 것을 보여준다.
3. java.lang.function의 함수형 인터페이스를 이해하기 위한 예제(1)
3. java.lang.function의 함수형 인터페이스를 이해하기 위한 예제(2)
: 3번 예제(1)과 달리 기본형 타입을 사용하는 함수형 인터페이스이다.
(UnaryOperator와 BinaryOperator 함수형 인터페이스는 매개변수의 타입과 반환타입이
모두 일치한다는 점을 제외하고는 Function과 똑같다. )
( 이 둘의 차이점은 매개변수 갯수 차이이다. 전자는 1개 후자는 2개 )
( Supplier 부분에서 get()이 아니라 getAsInt()이다. )
( UnaryOperator 부분에서 apply()가 아니라 applyAsInt()이다. )
( 위에서 IntUnaryOperator 대신 Function을 넣는다면 에러가 발생한다. )
( 그 이유는 매개변수 a와 반환 값의 타입을 추정할 수 없기 때문이다. )
( 그래서 만약 Function을 넣는다면, 아래와 같이 해야 한다.)
Function<Integer, Integer> f = (a) -> 2*a;
//매개변수 타입과 반환 타입은 Integer
또는
IntFunction<Integer> f = (a) -> 2*a;
//매개변수 타입은 int, 반환값은 Integer
( 그러나, IntUnaryOperator가 오토박싱과 언박싱의 횟수가 줄어들어 더 성능이 좋다. )