使用Java8 Streams从另外两个列表创建对象列表


问题内容

我有以下Java6和Java8代码:

List<ObjectType1> lst1 = // a list of ObjectType1 objects
List<ObjectType2> lst2 = // a list of ObjectType1 objects, same size of lst1

List<ObjectType3> lst3 = new ArrayLis<ObjectType3>(lst1.size());
for(int i=0; i < lst1.size(); i++){
  lst3.add(new ObjectType3(lst1.get(i).getAVal(), lst2.get(i).getAnotherVal()));
}

Java8中有什么方法可以使用Lambda以更简洁的方式处理前一个问题?


问题答案:

流绑定到给定的可迭代/集合,因此您不能真正地“并行”迭代两个集合。

一种解决方法是创建索引流,但不一定比for循环有所改进。流版本可能如下所示:

List<ObjectType3> lst3 = IntStream.range(0, lst1.size())
         .mapToObj(i -> new ObjectType3(lst1.get(i).getAVal(), lst2.get(i).getAnotherVal()))
         .collect(toList());