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

我想在Java 8中这样做

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

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

 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 newlist = new ArrayList(); for(int i=0;i<booleanList.size();i++){ if(booleanList.get(i)){ newList.add(objectList.get(i)); } } return newList; 

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

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

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