Java 为什么forEach(System.out::println)工作,而map(System.out::println)失败?
我正在做Streams教程练习(来自Oracle),不知道为什么会出现这个编译器错误(EclipseIDE)Java 为什么forEach(System.out::println)工作,而map(System.out::println)失败?,java,java-8,java-stream,Java,Java 8,Java Stream,我正在做Streams教程练习(来自Oracle),不知道为什么会出现这个编译器错误(EclipseIDE) 无法推断map(函数)的类型参数map旨在将每个输入A映射到结果B System.out.println(String)返回void,即nothing。因此,它不适合作为map的参数 即使允许,map也不是一个终端操作。所有流都必须以终端操作结束,否则它们将什么也不做。因为map需要一个返回值的函数,而forEach不需要。使用map的正确方法是收集并打印输出。List collect=
无法推断map(函数)的类型参数map
旨在将每个输入A映射到结果B
System.out.println(String)返回void
,即nothing。因此,它不适合作为map
的参数
即使允许,map
也不是一个终端操作。所有流都必须以终端操作结束,否则它们将什么也不做。因为map
需要一个返回值的函数,而forEach
不需要。使用map的正确方法是收集并打印输出。List collect=List。stream().map(String::toUpperCase).collect(Collectors.toList());
我也尝试了peek(System.out::println)
但它没有打印任何内容。这是因为peek
是一个非终端操作,在终端操作从流中提取数据之前,它不会执行任何操作。我也尝试过peek
,但它不起作用。@likejudopeek
不是终端操作。您需要一个终端操作来创建流功能正常。无终端操作==>无计算。forEach
是终端。peek
,map
,过滤器
不是。阅读文档。
Cannot infer type argument(s) for <R> map(Function<? super T,? extends R>)
/**
* Create a new list with all the strings from original list converted to
* lower case and print them out.
*/
private void exercise1() {
List<String> list = Arrays.asList(
"The", "Quick", "BROWN", "Fox", "Jumped", "Over", "The", "LAZY", "DOG");
list.stream().map(String::toUpperCase).map(System.out::println);
}