有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

基于另一个列表的列表中的java筛选器元素

我想在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<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) 个答案

  1. # 1 楼答案

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

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