Como verificar se o elemento existe usando uma expressão lambda?
Pergunta
Especificamente, tenho o TabPane e gostaria de saber se existe um elemento com ID específico nele.
Então, eu gostaria de fazer isso com a expressão lambda em Java:
boolean idExists = false;
String idToCheck = "someId";
for (Tab t : tabPane.getTabs()){
if(t.getId().equals(idToCheck)) {
idExists = true;
}
}
Solução
Tente usar anyMatch
da Expressão Lambda.É uma abordagem muito melhor.
boolean idExists = tabPane.getTabs().stream()
.anyMatch(t -> t.getId().equals(idToCheck));
Outras dicas
Embora a resposta aceita esteja correta, adicionarei uma versão mais elegante (na minha opinião):
boolean idExists = tabPane.getTabs().stream()
.map(Tab::getId)
.anyMatch(idToCheck::equals);
Não negligencie o uso Fluxo#mapa() que permite nivelar a estrutura de dados antes de aplicar o Predicate
.
As respostas acima exigem que você malloc um novo objeto de fluxo.
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))) {
...
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow