如何使用 lambda 表达式检查元素是否存在?

具体来说,我有 TabPane,我想知道是否有具有特定 ID 的元素。

因此,我想用 Java 中的 lambda 表达式来做这件事:

boolean idExists = false;
String idToCheck = "someId";


for (Tab t : tabPane.getTabs()){
if(t.getId().equals(idToCheck)) {
idExists = true;
}
}
163045 次浏览

尝试使用 Lambda 表达式的 anyMatch,这是一种更好的方法。

 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))) {
...
}