web-dev-qa-db-fra.com

Comment vérifier si l'élément existe en utilisant une expression lambda?

Plus précisément, j'ai TabPane et j'aimerais savoir s'il y a un élément avec un ID spécifique.

Donc, j'aimerais faire ceci avec l'expression lambda en Java:

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

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

Essayez d'utiliser anyMatch de l'expression lambda. C'est une bien meilleure approche.

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

Bien que la réponse acceptée soit correcte, je vais ajouter une version plus élégante (à mon avis):

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

Ne négligez pas d’utiliser Stream # map () qui permet d’aplatir la structure de données avant d’appliquer le Predicate.

41
jFrenetic

Les réponses ci-dessus vous obligent à malloc un nouvel objet de flux.

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