Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 同时迭代两个列表,并使用流创建另一个列表_Java_Lambda_Java Stream - Fatal编程技术网

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

Java 同时迭代两个列表,并使用流创建另一个列表,java,lambda,java-stream,Java,Lambda,Java Stream,我希望使用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.g

我希望使用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));
}
List list1=Arrays.asList(obj1、obj2、obj3);
List list2=Arrays.asList(true、false、true);
列表=新的ArrayList();

对于(int i=0;i您可以执行以下操作:

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

这种方法有什么问题?如果可能的话,你能形成一个
列表
列表
而不是创建两个独立的列表吗?而且,我不明白为什么你需要在here@AndrewTobilko那会是怎样的(单一列表)?例如@ParaJ,一个对列表-每对保留一个
MyObject
和一个相应的
Boolean
值(
ob1=true,obj2=false
),因为从
IntStream
开始,你需要
mapToObj
。但是你可以简化为
.filter(list2::get)。mapToObj(list1::get)
…我猜最终列表将保留列表1的插入顺序?@Federicoperalthaffner:无论哪个
列表
类型
收集器。toList()
将返回,它将始终反映流的遭遇顺序,即
列表1
/
列表2
(实际上,
IntStream.range
的升序用作列表索引)。@Holger你说得对。收集时,会为顺序流保留遭遇顺序,并且
Collectors.toList()
会返回一个列表(无论是什么实现)这反映了这个顺序。你知道文档中是否有明确的说明吗?我的意思是,我们可以放心地假设,这个顺序会得到尊重,就像我们在这里讨论的列表一样,但如果它在文档中…@FedericoPeraltaSchaffner:在这种情况下,情况正好相反。所有无序的收集器都有一个关于无序的明确声明n他们的文档。由于这也是通过报告的,所以并行流必须以一种方式使用组合器,如果不存在,则会产生按遭遇顺序的结果。这是有保证的。
 Streams.zip(list2.stream(), list1.stream(), (a,b) -> a ? b : null)
    .filter(Objects::nonNull)
    .collect(Collectors.toList())