Obj1 x = null;
String key = null;
while(it.hasNext()){
x = it.next();
key = x.getKey();
listObject.stream().filter(e -> e.getKey().equals(key)).findFirst().get();
}
这是在抱怨,有以下信息。"本地变量键必须是最终的或有效的最终..." 我理解lambda上下文是在运行时创建的,它需要不改变的变量。
我如何使用函数式来查找列表中的对象呢?我想避免使用老式的方式,即用 while
.
你可以简单地将变量声明移到循环内,从而使它们有效地成为最终变量。
...
while(it.hasNext()){
Obj1 x = it.next();
String key = x.getKey();
listObject.stream().filter(e -> e.getKey().equals(key)).findFirst().get();
}
JITetc 使得在循环外声明变量不再是问题,真的。
在这种情况下,你只需要把key做成final。例如,这应该是可行的。
while(it.hasNext()){
Obj1 x = it.next();
listObject.stream()
.filter(e -> e.getKey().equals(x.getKey()))
.findFirst().get();
}
我想避免用老式的方式通过一个while来迭代列表
下面是一种不需要迭代的方法 明确 while
循环。
StreamSupport.stream(spliteratorUnknownSize(it, Spliterator.ORDERED), false)
.map(...)
...