我正在研究 Java 8。将这个 for 循环转换为 Java 8 Stream 时遇到了一些麻烦。
for (int y = 0; y < 5; y ++) {
for (int x = y; x < 10; x += 2) {
System.out.println(x+y);
}
}
请帮忙!
转换嵌套循环的规范方法是使用flatMap
在流上,例如
IntStream.range(0, 5).flatMap(i->IntStream.range(i, 10))
.forEach(System.out::println);
您的任务中最棘手的部分是增量为 2,因为这在流 API 中没有直接等效项。有两种可能:
-
Use IntStream.iterate(y, x->x+2)
定义起始值和增量。然后你必须修改无限流limit
计算元素数量:.limit((11-y)/2)
.
因此循环的结果代码将如下所示:
IntStream.range(0, 5)
.flatMap(y->IntStream.iterate(y, x->x+2).limit((11-y)/2)
.map(x -> x+y)).forEach(System.out::println);
-
Use IntStream.range(0, (11-y)/2)
创建所需数量的升序流int
s 并修改它.map(t->y+t*2)
让它产生你内心想要的价值观for
loop.
然后,循环的结果代码将如下所示:
IntStream.range(0, 5)
.flatMap(y->IntStream.range(0, (11-y)/2).map(t->y+t*2).map(x -> x+y))
.forEach(System.out::println);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)