java有没有办法将这些嵌套的IntStreams扁平化为一个?有更短的路吗?
我将4个嵌套的for
循环更改为嵌套的IntStream
,但这个解决方案看起来不太好。我不知道怎么把它缩短?我应该以某种方式使用flatmap
IntStream.range(0, totalCluster).forEach(numCluster ->{
writeToFile("Cluster__________________________" + numCluster);
IntStream.range(0, totalAgency).forEach(numAgency ->{
writeToFile("\n\tCluster_" + numCluster + "_Agency_" + numAgency);
IntStream.range(0, totalProgramArea).forEach(numProgramArea ->IntStream.range(0, totalUsers).forEach(numUser ->{
writeToFile("\n\t\t\tAgency_" + numAgency + "_" + "ProgramArea_" + numProgramArea + "_User_" + numUser);
}));
});
});
# 1 楼答案
您可能在询问表单中的构造
然而,如果您需要最内部逻辑中每个外部循环的每次迭代的索引,那么没有很好的方法。你的问题的答案是-老式for循环在这里工作得更好
不过,这里有一个例子(我减少了混乱以提高可读性):
它会打印
这段代码的问题是,必须在堆上分配int数组,而不是使用堆栈中的循环计数器。为了简单起见,我只使用了
int[]
,这不是一个好的实践,实际上最好使用一些上下文对象你可以从这里得出一个解决方案的想法
现在,人们经常会问,是否有一种处理嵌套for循环的正确功能方法。在Haskell这样的语言中,您会使用这样的语言,因为列表是单子(或列表理解):
通过创建自己的函数组合器库,您完全可以在Java中使用类似的do符号逻辑。尽管这是可能的,但与Scala不同的是,Java的语法阻止了最终结果看起来比老式的for循环更好,在这种特殊情况下