자바 표준 라이브러리에서 람다에서 활용하라고 만들어둔 표준 함수형 인터페이스를 제공해줌
protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
return size() > 100;
}
LinkedHashMap
내부 메서드 - 맵의 키 밸류 조합이 100개가 넘을 때, true
를 반환함@FunctionalInterface
interface EldestEntryRemovalFunction<K, V> {
boolean remove(Map<K, V> map, Map.Entry<K, V> eldest);
}
인터페이스 | 함수 시그니처 | 의미 | 예시 |
---|---|---|---|
UnaryOperator<T> |
T apply(T t) |
반환값과 인수의 타입이 같은 함수, 인수는 1개 | String::toLowerCase |
BinaryOperator<T> |
T apply(T t1, T t2) |
반환값과 인수의 타입이 같은 함수, 인수는 2개 | BigInteger::add |
Predicate<T> |
boolean test(T t) |
한 개의 인수를 받아서 boolean을 반환하는 함수 | Collection::isEmpty |
Function<T,R> |
R apply(T t) |
인수와 반환 타입이 다른 함수 | Arrays::asList |
Supplier<T> |
T get() |
인수를 받지 않고 값을 반환, 제공하는 함수 | Instant::now |
Consumer<T> |
void accept(T t) |
한 개의 인수를 받고 반환값이 없는 함수 | System.out::println |
표준 함수형 인터페이스 대부분은 기본 타입만 지원함
→ 기본 함수형 인터페이스에 박싱된 기본 타입을 넣어 사용하지 말자 : 성능이 안좋아질 수 있음
표준 인터페이스 중 필요한 용도에 맞는 게 없는 경우
ex) 매개변수 3개를 받는 Predicate
구조적으로 동일하지만 독자적인 인터페이스로 남기는게 나은 경우
// Comparator
@FunctionInterface
public interface Comparator<T> {
int compare(T o1, T o2);
}
// ToIntBiFunction
@FunctionalInterface
public interface ToIntBiFunction<T, U> {
int applyAsInt(T t, U u);
}
→ 구조적으로 동일하지만 위 사항을 충족시킴