这似乎是一个简单的问题,但我一直陷在这个小问题上。

在Java 7中,您可以遍历对象并为其属性设置新值。

for (int i = 0; i < continentLijst.size(); i++) {
        continentLijst.get(i).setContinentId(i);
}


现在,我正在寻找在Java 8 lambda中执行相同的操作。
我想到的是:

 int i =0;

 continentLijst.stream().forEach(e -> {

        e.setContinentId(i++);
  });


这显然会产生错误...
就像我说的那样,这可能是我的初学者错误,但是任何帮助都会很棒!

最佳答案

您的尝试无效,因为在lambda表达式中使用的变量必须为(effectively) final(并且您正在尝试更新lambda表达式中的i的值)。

您可以保存对计数器的引用(例如AtomicInteger

AtomicInteger counter = new AtomicInteger(0);
continentLijst.forEach(c -> c.setContinentId(counter.getAndIncrement()));


或使用IntStream生成相应索引的流:

IntStream.range(0, continentLijst.size())
         .forEach(i -> continentLijst.get(i).setContinentId(i));

关于java - 在使用Lambda遍历集合时使用setter方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28888281/

10-11 00:34