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);
}
/////////
// 람다식으로 EldestEntryRemovalFunction 정의
EldestEntryRemovalFunction<Integer, String> removeIfSizeExceeds100 =
(map, eldest) -> map.size() > 100;
// LinkedHashMap을 오버라이드하여 removeEldestEntry 메서드 구현
LinkedHashMap<Integer, String> cache = new LinkedHashMap<>() {
@Override
protected boolean removeEldestEntry(Map.Entry<Integer, String> eldest) {
return removeIfSizeExceeds100.remove(this, eldest);
}
};
EldestEntryRemovalFunction
은 이 기능을 함수형 인터페이스로 일반화한 것removeEldestEntry
기능을 람다식으로 정의하고 유연하게 사용할 수 있음인터페이스 | 함수 시그니처 | 의미 | 예시 |
---|---|---|---|
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 |
표준 함수형 인터페이스 대부분은 기본 타입만 지원함
→ 기본 함수형 인터페이스에 박싱된 기본 타입을 넣어 사용하지 말자 : 성능이 안좋아질 수 있음 (박싱과 언박싱으로 인해,,)