Java 8 Stream嵌套for循环

时间:2016-12-29 21:05:44

标签: loops lambda java-8 java-stream

如何使用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)));

1 个答案:

答案 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;
    }
}