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 有一些方便的方式来处理这个问题吗?
您无法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)
| 归档时间: |
|
| 查看次数: |
3915 次 |
| 最近记录: |