用于嵌套foreach的java Guava迭代器
我想使用guava迭代器或java8 foreach(可能是lambda表达式)嵌套for循环,处理一些语句并返回一个长变量。这是我用本机java编写的代码。请原谅我的代码可能没有效率。我在网上读到,在新的Java8foreach中访问非最终变量是不可能的
Long x = Long.valueOf(0);
Long y = Long.valueOf(0);
for(FirstLevel first : Levels)
{
if(first.getSecondLevels() == null)
{
x= x + getSomeValue(first);
}
for (SecondLevel second : first.getSecondLevels())
{
y = y + getSomeValue(second);
}
}
return x + y;
我尝试过,但无法返回值。提前感谢您的帮助
# 1 楼答案
首先,使用装箱的
Long
值是没有意义的,即使您曾经需要一个装箱的值,也不需要调用Long.valueOf
,Java已经在将long
原语转换为装箱的Long
对象时为您做了这件事此外,由于添加
long
值并不取决于求和数的顺序,因此没有理由在整个操作过程中保留两个变量,因为您将在最后添加它们:请注意,运算符
+=
的作用与这里的result = result + …
相同,但避免了目标操作数的重复假设
Levels
和getSecondLevels
的结果都是集合,您可以编写与流操作相同的集合或者,或者
如果
Levels
是一个数组,则必须用Arrays.stream(Levels)
替换Levels.stream()
,同样,如果getSecondLevels()
返回一个数组,则必须用Arrays.stream(first.getSecondLevels())
替换first.getSecondLevels().stream()