2014-04-11 10 views

Antwort

138

Try anyMatch von Lambda Expression zu verwenden. Es ist viel besser Ansatz.

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

Während die akzeptierte Antwort richtig ist, werde ich eine elegantere Version (meiner Meinung nach) hinzufügen:

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

nicht vernachlässigen Stream#map() verwenden, die vor dem Aufbringen der Datenstruktur zu glätten erlaubt die Predicate.

+2

was ist hier besser? Ich sehe nur eine weitere Operation. Tut mir leid, ich bin neu in diesem lamba-Ding. – TecHunter

+2

@TecHunter ist es expliziter. Stellen Sie sich vor, Sie lesen diesen Code zum ersten Mal oder nach einer Weile. Es gibt mehrere Vorteile: Zunächst zeigen wir sofort, dass wir uns eigentlich nicht für den Tab interessieren, sondern für ein Mapping. Zweitens zeigen wir, indem wir Methodenverweise verwenden (was nur möglich ist, weil wir das ursprüngliche Lambda in zwei Schritte aufteilen), dass im Code keine Überraschungen versteckt sind. Drittens, indem wir Methodenverweise verwenden, erstellen wir kein neues Prädikat, sondern verwenden einfach 'equals'. Obwohl das Beispiel hier sehr einfach ist, hoffe ich, dass Sie verstehen, was ich meine. –

+0

@MalteHartwig danke! Ja, ich bekomme deine 3 Punkte, aber ich fragte nach der Abflachung mit 'map', es macht einen weiteren Verarbeitungsschritt nein? Ich werde versuchen, die 2 Methoden zu vergleichen :) – TecHunter

0

Die obigen Antworten erfordern, dass Sie ein neues Stream-Objekt malloc.

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))) { 
    ... 
} 
Verwandte Themen