根据另一个列表过滤列表中的元素

Kar*_*hik 6 java java-8

我想在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用更少的代码来做到这一点?

Era*_*ran 5

您可以使用 anIntStream生成索引,然后filter获取过滤后的索引并mapToObj获取相应的对象:

List<Object> newlist =
    IntStream.range(0,objectList.size())
             .filter(i -> booleanList.get(i))
             .mapToObj(i -> objectList.get(i))
             .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

  • @karthik,请注意,它实际上并不是您想要的“较小代码”。您的 Java-7 解决方案是 178 字节(包括空格),而此解决方案是 206 字节;-) (3认同)