부정을 위한 Predicate.not()
람다로 작성하는 대신 Predicate.not()을 사용하여 메서드 참조를 깔끔하게 부정합니다.
코드 비교
✕ Java 8
List<String> nonEmpty = list.stream()
.filter(s -> !s.isBlank())
.collect(Collectors.toList());
✓ Java 11+
List<String> nonEmpty = list.stream()
.filter(Predicate.not(String::isBlank))
.toList();
이 코드에 문제가 있나요? 알려주세요.
모던 방식이 더 나은 이유
더 깔끔한 부정
메서드 참조를 부정하기 위해 람다로 감쌀 필요가 없습니다.
조합 가능
모든 Predicate와 함께 작동하여 깔끔한 Predicate 체인을 가능하게 합니다.
자연스럽게 읽힘
Predicate.not(String::isBlank)는 영어처럼 읽힙니다.
이전 방식
람다 부정
모던 방식
Predicate.not()
JDK 버전
11
난이도
초급
JDK 지원
부정을 위한 Predicate.not()
사용 가능
JDK 11 (2018년 9월) 이후 사용 가능.
동작 원리
Java 11 이전에는 메서드 참조를 부정하려면 람다로 감싸야 했습니다. Predicate.not()은 메서드 참조를 직접 부정하는 정적 팩토리 메서드입니다.
관련 문서