2014-10-02 15 views
11

mam Set<String> usernames i List<Player> playersJava 8 Lambda - Filtr kolekcja innym kolekcji

chciałabym odfiltrować tych graczy, którzy nie są w zestawie.

wiem, jak to zrobić w Vanilla pre Java 8

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

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

Próbuję napisać prosty kod z wyrażenia lambda, ale walczę, aby uzyskać usernames.contains() pracować w filtrze

players.stream().filter(!usernames.contains(p -> p.getUsername())) 
.collect(Collectors.toList()); 

To nie jest kompilowane. „nie może resove metoda GetUserName()”

Odpowiedz

24

Masz wyrażenia lambda w niewłaściwym miejscu - cała argument filter powinno być wyrażenie lambda. Innymi słowy: "Biorąc pod uwagę gracza p, czy powinienem go odfiltrować, czy nie?"

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

Woły! Wiedziałem, że jest coś prostego, co przeoczyłem. Dzięki! #feelsAshamed –

+0

Nice! dzięki! ~ –

+0

Witam, używam scenariusza wyjątkowego, ale pokazuje błąd kompilacji "Nazwy użytkownika lokalnego" zdefiniowane w zasięgu obejmującym muszą być ostateczne lub efektywne. " –

Powiązane problemy