Java 8 - 如何将属性值从一个列表复制到另一个列表?

zhu*_*wei 3 java lambda java-8

我有两个List,例如:

List<Foo> list1 = Lists.newArrayList(new Foo(...),...);
List<Bar> list2 = Lists.newArrayList(new Bar(...),...);
Run Code Online (Sandbox Code Playgroud)

里面Bar有一个属性,fooId. 认为list1.size() == list2.size()。我想按顺序设置fooId实例Bar

我尝试了下面的代码:

int index = 0;
list2.forEach(b -> b.fooId = list1.get(index++).getId());
Run Code Online (Sandbox Code Playgroud)

但编译失败

在封闭范围内定义的局部变量索引必须是最终的或有效最终的

Java 8 有一些方便的方式来处理这个问题吗?

Era*_*ran 5

您无法index从 lambda 表达式内部修改变量。

您可以使用 an 迭代索引IntStream(尽管与简单的 for 循环相比,这并没有太大的改进):

IntStream.range(0,list1.size())
         .forEach(i -> list2.get(i).setFooId(list1.get(i).getId()));
Run Code Online (Sandbox Code Playgroud)