Answers:
尽管所接受的答案是正确的,但我将添加一个更优雅的版本(我认为):
boolean idExists = tabPane.getTabs().stream()
.map(Tab::getId)
.anyMatch(idToCheck::equals);
不要忽略使用Stream#map(),它允许在应用之前将数据结构弄平Predicate
。
equals
。尽管理所当然,这里的示例非常简单,但是我希望您能理解我的意思。
map
,这是否还需要其他处理步骤?我将尝试比较两种方法:)
map
)上的中间操作本质上是惰性的。这意味着该getId
方法不适用于集合的每个元素。延迟评估它,直到anyMatch
返回true。
上述答案要求您分配一个新的流对象。
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
。