同时迭代两个列表并使用流创建另一个列表

2022-09-02 13:37:08

我想使用流实现以下目标:

List<MyObject> list1 = Arrays.asList(obj1, obj2, obj3);
List<Boolean> list2 = Arrays.asList(true, false, true);
List<MyObject> list = new ArrayList<>();
for(int i=0; i<list1.size();i++) {
     if(list2.get(i))
         list.add(list1.get(i));
}

任何人都可以帮忙吗?这应该很容易,但我是Java流的新手。

注意:list1 和 list2 的长度将始终相同。


答案 1

你可以做这样的事情:

List<MyObject> list = IntStream.range(0, list1.size())
    .filter(i->list2.get(i))
    .map(i->list1.get(i))
    .collect(Collectors.toList())

如果Java内置了流,那就更好了。例如,对于番石榴,您可以使用:zip

 Streams.zip(list2.stream(), list1.stream(), (a,b) -> a ? b : null)
    .filter(Objects::nonNull)
    .collect(Collectors.toList())

答案 2

推荐