답변:
anyMatchLambda Expression을 사용해보십시오 . 훨씬 더 나은 접근 방식입니다.
boolean idExists = tabPane.getTabs().stream()
.anyMatch(t -> t.getId().equals(idToCheck));
받아 들여지는 대답은 정확하지만 더 우아한 버전을 추가하겠습니다 (내 의견으로는).
boolean idExists = tabPane.getTabs().stream()
.map(Tab::getId)
.anyMatch(idToCheck::equals);
방치 사용하지 마십시오 스트림 #지도 () 을 적용하기 전에 데이터 구조를 평평하게 할 수 있습니다 Predicate.
equals. 당연히 여기의 예는 매우 간단하지만 제 말을 이해하기를 바랍니다.
map습니다. 다른 처리 단계를 수행하지 않습니까? 두 가지 방법을 비교해
map으로 게으른 작업 입니다. 즉 getId, 컬렉션의 각 요소에 메서드가 적용되지 않습니다. true를anyMatch 반환 할 때까지 느리게 평가 됩니다.
위의 답변은 새 스트림 객체를 malloc해야합니다.
public <T>
boolean containsByLambda(Collection<? extends T> c, Predicate<? super T> p) {
for (final T z : c) {
if (p.test(z)) {
return true;
}
}
return false;
}
public boolean containsTabById(TabPane tabPane, String id) {
return containsByLambda(tabPane.getTabs(), z -> z.getId().equals(id));
}
...
if (containsTabById(tabPane, idToCheck))) {
...
}
noneMatch대신anyMatch.