在Lambda表达式中设置对象

Den*_*nov 2 java lambda

如何在lambda表达式中将我的对象设置为另一个对象?我有错误

lambda表达式中使用的变量应为final或有效为final

使用以下代码:

public MyObj myFun(MyObj o) {
   MyObj obj = null;

   myObjList.stream().filter(o -> ...).forEach(o -> {
      // I do some stuff here

      // I need here set obj to o, but I got error
      obj = o;
   });

   return myObj; // I need return found obj or null;
}
Run Code Online (Sandbox Code Playgroud)

lex*_*ore 5

您不能分配o给外部变量。但您可以将其作为流处理的结果返回。使用map而不是forEacho从映射器返回。然后执行- findAnyfindFirst将给您一个Optional<MyObj>。最后,执行操作orElse(null)以返回找到并处理的对象,或者null如果找不到则返回。

MyObj obj = myObjList
   .stream()
   .filter(o -> ...)
   .map(o -> {
       // I do some stuff here

       // I need here set obj to o, but I got error
       return o;
   })
   .findAny()
   .orElse(null);
Run Code Online (Sandbox Code Playgroud)