2014-10-02 31 views
11

göre filtreleme koleksiyonu I have a Set<String> usernames veJava 8 Lambda - başka bir koleksiyona

List<Player> players Ben Set olmayan, oyuncuları filtrelemek istiyorum.

Ben Vanilya öncesi Java 8

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

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

Bir Lambda ifade ile bu basit kod yazmak çalışıyorum bunu nasıl biliyorum ama bir filtre çalışmaya usernames.contains() almak için mücadele ediyorum

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

Bu, derlenmiyor. "Can not resove yöntem GetUserName()" Yanlış yerde lambda ifade var

cevap

24

- filter için argüman bütün lambda ifadesi olmalıdır. Diğer bir deyişle, "Bir oyuncuya p verilirse, onu filtrelemeli mi, yapmamalı mıyım?"

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

Bullocks! Kaçırdığım basit bir şey olduğunu biliyordum. Teşekkürler! #feelsAshamed –

+0

Güzel! teşekkürler! ~ –

+0

Merhaba, ben senaryo kullanıyorum ama derleme hatası gösterir "Yerel değişken" kullanıcı adları "kapalı bir kapsamda tanımlanmış son veya etkili bir son olmalıdır" –