Java 每个 8 个流和 peek

Java 8 stream for each and peek

我偶然发现了一个我无法解决的带有流的任务。我不得不修改代码以打印 abcABC 而不是 aAbBcC.

我明白为什么要这样打印了。

// prints 'a b c' then prints 'A B C'
List<String> strings = List.of("a", "b", "c");
    strings.stream()
           .peek(str -> System.out.println(str))
           .map(str -> str.toUpperCase())
           .forEach(str -> System.out.println(str));

感谢任何帮助。

这是一种方法:

List<String> strings = List.of("a", "b", "c");
    strings.stream()
           .peek(str -> System.out.println(str))
           .sorted()
           .map(str -> str.toUpperCase())
           .forEach(str -> System.out.println(str));

sorted() 操作必须在终端操作开始输出元素之前处理 Stream 的所有元素(因为如果不遍历所有元素就无法对 Stream 进行排序它的元素)。

因此,这导致 peek() 在第一个大写元素被 forEach() 输出之前执行所有元素。