【发布时间】:2020-07-27 21:57:59
【问题描述】:
下面的代码没有打印任何值。没有 System.out.println() 语句被打印。我假设 peek 处理修改数据。令人惊讶的是 peek() 内部的逻辑甚至没有被执行。 如果我使用收集器收集流,我会看到所需的行为。
- 为什么至少 print 语句 1 没有被执行?
- 为什么外部对象(输出列表)没有附加所需的值?
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class HelloWorld {
public static void main(String[] args) {
List<String> input = new ArrayList<>(Arrays.asList("hello", "bye", "vacation"));
List<String> output = new ArrayList<>();
input.stream().peek(x -> {
System.out.println(x+"inside"); // print statement 1
if (x.length() > 3) {
output.add(x.toUpperCase());
}
});
output.forEach(System.out::println); // print statement 2
}
}
【问题讨论】:
-
peek 是一个中间操作,以后没有终端操作就不会调用它
-
peek->forEach -
@saka1029:那么调用
stream()应该省略。
标签: java collections java-8 java-stream