Java8无限流输出

Java8无限流输出,java,lambda,java-8,java-stream,Java,Lambda,Java 8,Java Stream,下面的代码使用lambda表达式创建空映射流,下一行用于输出流中的任何元素。但在运行代码时,它会提供无限的输出。我不知道为什么,因为它应该打印一次{},因为地图是空的。有人能解释一下发生了什么事吗 Stream<Map<String,String>> mapStream = Stream.generate(() -> { return Collections.emptyMap(); }); mapStream.forEach(Sys

下面的代码使用lambda表达式创建空映射流,下一行用于输出流中的任何元素。但在运行代码时,它会提供无限的输出。我不知道为什么,因为它应该打印一次{},因为地图是空的。有人能解释一下发生了什么事吗

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

这就是文档所说的:

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


这就是文档所说的:

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

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

因此,您有一个无限流,其中每个新元素都是通过调用供应商创建的,如果空映射表示为{},那么您有一个流:

{}, {}, {}, {} ...
您需要的是:

Stream.of(Collections.emptyMap()).forEach(System.out::println);
它将只打印{}。虽然我不明白你为什么想要这个…

来自

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

因此,您有一个无限流,其中每个新元素都是通过调用供应商创建的,如果空映射表示为{},那么您有一个流:

{}, {}, {}, {} ...
您需要的是:

Stream.of(Collections.emptyMap()).forEach(System.out::println);

它将只打印{}。虽然我有点不明白你为什么要这样做…

另外:如果你只需要一个元素的流而不是无限流,试试。另外:如果你只需要一个元素的流而不是无限流,试试。当你读Streamgenerate的javadoc时,你不明白什么?当你读Streamgenerate的javadoc时,你不明白什么?