我有一个Set<String> usernames
和List<Player> players
我想过滤掉那些不属于Set的玩家.
我知道如何在Vanilla pre Java 8中做到这一点
List<Player> distinctPlayers = new ArrayList<Player>();
for(Player p : players) {
if(!usernames.contains(p.getUsername()) distinctPlayers.add(p);
}
Run Code Online (Sandbox Code Playgroud)
我试图用Lambda表达式编写这个简单的代码,但我很难usernames.contains()在过滤器中工作
players.stream().filter(!usernames.contains(p -> p.getUsername()))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
这不编译."无法恢复方法getUsername()"
我想在Java 8 中做到这一点
我有一个Boolean列表和另一个Object列表,这两个列表的大小总是相同的。我想从object列表中删除所有元素,这些元素在列表false中的相应索引处boolean。
我将尝试用一个例子来解释:
objectList = {obj1,obj2,obj3,obj4,obj5};
booleanList = {TRUE,FALSE,TRUE,TRUE,FALSE};
Run Code Online (Sandbox Code Playgroud)
所以从这些列表中,我想更改objectList为
{obj1,obj3,obj4}// obj2 and obj5 are removed because corresponding indices are `FALSE` in `booleanList`.
Run Code Online (Sandbox Code Playgroud)
如果我已经这样做了Java 7,我会做以下事情:
List<Object> newlist = new ArrayList<>();
for(int i=0;i<booleanList.size();i++){
if(booleanList.get(i)){
newList.add(objectList.get(i));
}
}
return newList;
Run Code Online (Sandbox Code Playgroud)
有没有办法Java 8用更少的代码来做到这一点?