Comment vérifier si un élément existe à l'aide d'une expression lambda ?
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;
}
}
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