在lambda表达式

时间:2017-10-30 19:12:28

标签: java lambda

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

  lambda表达式中使用的

变量应该是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;
}

3 个答案:

答案 0 :(得分:4)

您无法将o指定给外部变量。但是您可以通过流处理返回它。使用map代替forEach,然后从地图工具中返回o。然后执行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);

答案 1 :(得分:0)

您可以简单地在循环中遍历它,然后在找到它时返回值,而不是通过它进行流式传输。

流畅的答案可能是使用类似findFirst的内容。

答案 2 :(得分:0)

而不是使用forEach而是考虑使用map(o->{...}).findFirst().get()(或类似的,取决于您的逻辑,如果没有项目相关 - 您的null案例)。

通常,您应该让流在收集器或选择器中完成(findFirst / findAny等),因为这样可以编写更简单,更清晰的代码