How to check if element exists using a lambda expression?

前端 未结 3 965
失恋的感觉
失恋的感觉 2020-12-07 15:26

Specifically, I have TabPane, and I would like to know if there is element with specific ID in it.

So, I would like to do this with lambda expression in Java:

<
相关标签:
3条回答
  • 2020-12-07 15:43

    The above answers require you to malloc a new stream object.

    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))) {
       ...
    }
    
    0 讨论(0)
  • 2020-12-07 15:51

    Try to use anyMatch of Lambda Expression. It is much better approach.

     boolean idExists = tabPane.getTabs().stream()
                .anyMatch(t -> t.getId().equals(idToCheck));
    
    0 讨论(0)
  • 2020-12-07 15:54

    While the accepted answer is correct, I'll add a more elegant version (in my opinion):

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

    Don't neglect using Stream#map() which allows to flatten the data structure before applying the Predicate.

    0 讨论(0)
提交回复
热议问题