Java 8无限流输出

iCu*_*ous 1 java lambda java-8 java-stream

下面的代码创建空的地图Stream使用lambda expression和下一行用于输出的任何元素的信息流中.但是在运行代码时它会产生无限的输出.我不知道为什么,因为它应该打印{}一次因为地图是空的.有人可以解释发生了什么吗?

 Stream<Map<String,String>> mapStream = Stream.generate(() -> {
        return Collections.emptyMap();
    });
    mapStream.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

Bor*_*der 6

文档中Stream.generate

返回无限顺序无序流,其中每个元素由提供的生成Supplier.这适用于生成恒定流,随机元素流等.

所以你有一个无限的流,每个新的元素都是通过调用来创建的Supplier,如果一个空的地图被表示为{}那么你有一个流:

{}, {}, {}, {} ...
Run Code Online (Sandbox Code Playgroud)

你在寻找的是:

Stream.of(Collections.emptyMap()).forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

哪个会打印出来的{}.(虽然为什么你会想要这有点超出我...)