gho*_*der 3 java lambda java-8 java-stream
我正在尝试学习Stream API,我遇到了以下代码:
public class Test{
public static void main (String[] args)
{
List <Integer> a = Arrays.asList(2,3,4);
System.out.println(a.stream().filter(i -> i < 10).average());
}
}
Run Code Online (Sandbox Code Playgroud)
它给了一个
符号"average()"未找到错误.
但是,当我用下面的更改sysout时,它按预期运行正常
System.out.println(a.stream().filter(i -> i < 10).mapToInt(i -> i).average());
Run Code Online (Sandbox Code Playgroud)
有人可以解释这里的区别吗?
A Stream<T>
没有average()
方法,因为元素类型T
可以是任何引用类型,它不一定具有计算Stream
元素平均值的含义.
另一方面,a IntStream
具有一种average()
方法,因为它具有int
很好地定义了平均操作的元素.
因此,您必须将a转换Stream<Integer>
为IntStream
(via mapToInt()
)才能调用average()
.