同时迭代两个列表并使用STREAMS创建另一个列表 [英] Iterate two lists simultaneously and create another using streams

查看:39
本文介绍了同时迭代两个列表并使用STREAMS创建另一个列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望使用STREAMS实现以下目标:

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 Streams还是个新手。

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

推荐答案

您可以执行以下操作:

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())

这篇关于同时迭代两个列表并使用STREAMS创建另一个列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆