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;
    }
}
Foi útil?

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
scroll top