从列表中过滤元素基于另一个列表

时间:2015-08-04 12:05:25

标签: java java-8

我想在 Java 8

中执行此操作

我有一个Boolean列表和另一个Object列表,这两个列表的大小始终相同。我想删除object列表中的所有元素,这些元素在false列表中的相应索引处有boolean

我将尝试用一个例子来解释:

objectList = {obj1,obj2,obj3,obj4,obj5};
booleanList = {TRUE,FALSE,TRUE,TRUE,FALSE};

因此,从这些列表中,我想将objectList更改为

{obj1,obj3,obj4}// obj2 and obj5 are removed because corresponding indices are `FALSE` in `booleanList`.

如果我在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;

有没有办法在代码较少的Java 8中执行此操作?

1 个答案:

答案 0 :(得分:4)

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

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