Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.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 SQL Lambda将for循环变量添加到对象_Java_Lambda - Fatal编程技术网

Java SQL Lambda将for循环变量添加到对象

Java SQL Lambda将for循环变量添加到对象,java,lambda,Java,Lambda,我正在创建一个程序,该程序在对象之间循环,并根据循环到达的迭代更改团队变量,但是get“从lambda表达式引用的局部变量必须是final或实际上是final”错误。有人能提出解决办法吗 for(int i=1; i<11; i++){ ObjectList.stream() .filter(Student -> Student.getRole().equals("Design")) .filter(Student ->

我正在创建一个程序,该程序在对象之间循环,并根据循环到达的迭代更改团队变量,但是get“从lambda表达式引用的局部变量必须是final或实际上是final”错误。有人能提出解决办法吗

 for(int i=1; i<11; i++){
      ObjectList.stream()
          .filter(Student -> Student.getRole().equals("Design"))
           .filter(Student -> Student.getTeam() == 0)
          .forEach(Student -> {
              Student.setTeam(i);
          System.out.println(Student);
          });
          }
for(int i=1;i Student.getRole().equals(“设计”))
.filter(Student->Student.getTeam()==0)
.forEach(学生->{
学生:塞塔姆(我);
系统输出打印(学生);
});
}

这似乎非常浪费cpu。 afaict,您正在为每个拥有团队0的设计专业学生设置唯一且递增的团队id

对于您的问题,您可以随时复制“i”,如中所示:

final int teamId = i;
然后使用seteam(teamId)

一个更简单的方法(如果你真的不能编写for循环,必须使用streams…)是


好的老阵法拳击技巧:)它看起来有点难看,但是非常有用!(+1)@RannLifshitz,数组ref技巧即使对我来说也不太流行,因为它不可挥发。我本可以使用一个过度杀戮的atomicinteger,但它会引发更多的问题…一个简单的类可以做到:MutableInteger{volatile int value;}。@user2023577:我还使用了volatile和原子原语。当必须处理具有接点精度的同步时,它们是一个很好的工具。谢谢你把他们带到讨论中来。
final int[] nextId = new int[]{1};
ObjectList.stream()
        .filter(s -> "Design".equals(s.getRole()) && s.getTeam() == 0)
        .forEach(s -> {
             s.setTeam(nextId[0]++);
             System.out.println(s);
         });