具体地说,我有TabPane,我想知道其中是否有具有特定ID的元素。
所以,我想用Java中的lambda表达式来做这件事:
boolean idExists = false;
String idToCheck = "someId";
for (Tab t : tabPane.getTabs()){
if(t.getId().equals(idToCheck)) {
idExists = true;
}
}
发布于 2014-04-11 14:24:16
尝试使用Lambda表达式的anyMatch
。这是一种更好的方法。
boolean idExists = tabPane.getTabs().stream()
.anyMatch(t -> t.getId().equals(idToCheck));
发布于 2016-12-13 03:45:31
虽然公认的答案是正确的,但我将添加一个更优雅的版本(在我看来):
boolean idExists = tabPane.getTabs().stream()
.map(Tab::getId)
.anyMatch(idToCheck::equals);
不要忽略使用Stream#map(),它允许在应用Predicate
之前扁平化数据结构。
发布于 2018-02-23 17:58:43
以上答案要求您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))) {
...
}
https://stackoverflow.com/questions/23004921
复制相似问题