如何使用java stream执行以下嵌套循环?
for (int x = 0; x < 5; x++) {
for (int y = 0; y < 5; y++) {
System.out.println(x + ", " + y);
}
}
我可以使用IntStream.range(0,5)轻松完成一个循环。流可以实现吗?
编辑:我想我能做到这一点,但可以用flatMap完成吗?IntStream.range(0, 5)
.forEach(x -> IntStream.range(x, 5).forEach(y -> System.out.println(x + ", " + y)));
答案 0 :(得分:3)
你的意思是这样吗?
IntStream.range(0, 5)
.boxed()
.flatMap(x -> IntStream.range(0, 5)
.mapToObj(y -> new int[] { x, y }))
.map(xy -> xy[0] + ", " + xy[1])
.forEach(System.out::println);
<强>更新强>
如果用实际对象替换数组会更好。
IntStream.range(0, 5)
.boxed()
.flatMap(x -> IntStream.range(0, 5)
.mapToObj(y -> new Coord(x, y)))
.forEach(System.out::println);
public final class Coord {
private final int x;
private final int y;
public Coord(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return this.x;
}
public int getY() {
return this.y;
}
@Override
public String toString() {
return this.x + ", " + this.y;
}
}