2014-10-02 13 views
11

Ich habe ein Set<String> usernames und List<Player> playersJava 8 Lambda - Filtersammlung von einer anderen Sammlung

Ich möchte die Spieler, um herauszufiltern, die nicht im Set sind.

Ich weiß, wie diese 8 in Vanilla Pre Java zu tun

List<Player> distinctPlayers = new ArrayList<Player>(); 

for(Player p : players) { 
    if(!usernames.contains(p.getUsername()) distinctPlayers.add(p); 
} 

Ich versuche, diesen einfachen Code mit einem Lambda-Ausdruck zu schreiben, aber ich habe Schwierigkeiten usernames.contains() zu bekommen in einem Filter zu arbeiten

Dies wird nicht kompiliert. "Can not resove Methode getUsername()"

Antwort

24

Sie den Lambda-Ausdruck in der falschen Stelle haben - die ganze Argument für filter sollte der Lambda-Ausdruck sein. Mit anderen Worten: "Gibt es einen Player , sollte ich ihn filtern oder nicht?"

players.stream().filter(p -> !usernames.contains(p.getUsername())) 
+2

Ochsen! Ich wusste, dass es etwas Einfaches gab, das ich vermisste. Vielen Dank! #feelsAshamed –

+0

Schön! Danke! ~ –

+0

Hallo, ich benutze excact Szenario, aber es zeigt Kompilierungsfehler "Lokale Variable" Benutzernamen "definiert in einem umschließenden Bereich muss endgültig oder effektiv endgültig sein" –

Verwandte Themen