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

时间:2014-04-11 06:19:43

标签: java java-8 lambda

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

所以,我想用Java中的lambda表达式来做这个:

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

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

3 个答案:

答案 0 :(得分:216)

尝试使用Lambda Expression的anyMatch。这是更好的方法。

 boolean idExists = tabPane.getTabs().stream()
            .anyMatch(t -> t.getId().equals(idToCheck));

答案 1 :(得分:37)

虽然接受的答案是正确的,但我会添加一个更优雅的版本(在我看来):

boolean idExists = tabPane.getTabs().stream()
    .map(Tab::getId)
    .anyMatch(idToCheck::equals);

不要忽视使用Stream#map(),这样可以在应用Predicate之前展平数据结构。

答案 2 :(得分:3)

以上答案要求您使用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))) {
   ...
}