[英]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
。 然后执行findAny
或findFirst
这将为您提供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.