繁体   English   中英

在Lambda表达式中设置对象

[英]Set object in lambda expression

如何在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;
}

您不能将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);

与其流式传输,不如直接在一个循环中循环访问,然后在找到它时返回该值。

简单的答案可能是使用诸如findFirst之类的东西。

除了使用forEach考虑使用map(o->{...}).findFirst().get() (如果没有任何相关项,则取决于您的逻辑,这与您的逻辑类似-您的null )。

通常,应该让流在收集器或选择器(findFirst / findAny等)中完成,因为这将使您编写更简单明了的代码

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM