Question

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

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

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

for (Tab t : tabPane.getTabs()){
    if(t.getId().equals(idToCheck)) {
        idExists = true;
    }
}
Était-ce utile?

La solution

Essayez d'utiliser anyMatch d'expression Lambda.C'est une bien meilleure approche.

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

Autres conseils

Bien que la réponse acceptée soit correcte, j'ajouterai une version plus élégante (à mon avis) :

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

Ne négligez pas l'utilisation Flux#map() ce qui permet d'aplatir la structure des données avant d'appliquer le Predicate.

Les réponses ci-dessus nécessitent que Malloc a 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))) {
   ...
}

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top