반응형
람다 식을 사용하여 요소가 존재하는지 확인하는 방법은 무엇입니까?
구체적으로는 TabPane을 가지고 있는데, 거기에 ID가 특정된 요소가 있는지 알고 싶습니다.
Java의 lamda 표현으로 이 작업을 수행해 보겠습니다.
boolean idExists = false;
String idToCheck = "someId";
for (Tab t : tabPane.getTabs()){
if(t.getId().equals(idToCheck)) {
idExists = true;
}
}
람다 식을 사용해 보십시오.그것이 훨씬 더 나은 접근법이다.
boolean idExists = tabPane.getTabs().stream()
.anyMatch(t -> t.getId().equals(idToCheck));
인정된 답변은 맞지만 좀 더 우아한 버전을 추가하겠습니다.
boolean idExists = tabPane.getTabs().stream()
.map(Tab::getId)
.anyMatch(idToCheck::equals);
Stream #map()을 사용하면 데이터 구조를 평평하게 만들 수 있습니다.Predicate
.
위의 답변에서는 새로운 스트림오브젝트를 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))) {
...
}
언급URL : https://stackoverflow.com/questions/23004921/how-to-check-if-element-exists-using-a-lambda-expression
반응형
'programing' 카테고리의 다른 글
Lombok은 getter와 setter를 생성하지 않습니다. (0) | 2022.09.09 |
---|---|
업스트림에서 응답 헤더를 읽는 동안 업스트림에서 너무 큰 헤더가 전송되었습니다. (0) | 2022.09.09 |
mariadb 파티션이 더 나은 성능을 제공하지 못하는 이유는 무엇입니까? (0) | 2022.09.09 |
JavaScript에서 옵션 함수 파라미터를 선언하려면 어떻게 해야 합니까? (0) | 2022.09.09 |
에러 코드: 1235.이 버전의 MariaDB는 아직 '창 함수로 카운트(DISTINCT) 집계'를 지원하지 않습니다. (0) | 2022.09.09 |