AdH*_*nem 9 java arrays foreach java-8 java-stream
在这个问题中,已经回答说两个表达式都是相同的,但在这种情况下它们会产生不同的结果.对于给定的int[] scores,为什么这有效:
Arrays.stream(scores)
.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
......但这不是:
Arrays.asList(scores).stream()
.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
据我所知,.stream()可以在任何Collection上调用,列表肯定是.第二个代码片段只返回一个包含整个数组的流而不是元素.
Era*_*ran 16
您看到的行为并非特定于Streams.
传递给它时Arrays.asList(scores)返回a ,因为泛型类型参数不能被基本类型替换.因此,当您调用时,编译器将使用代替.List<int[]>int[]asList(T... a)int[]T
如果scores改为Integer[],你将得到你期望的输出(Arrays.asList(scores)即将返回a List<Integer>).
第二个代码片段不起作用的原因是List<int>Java中没有这样的东西.这就是为什么Arrays.asList(scores)没有产生你期望的.
切换int[]到Integer[]将解决这个问题,因为这两个代码会产生相同的结果.但是,您的代码效率会降低,因为所有ints都会被装箱.
事实上,效率是stream原始数组过载的原因.您的呼叫Arrays.stream(scores)被路由到stream(int[] array),生成IntStream对象.现在,你可以申请.forEach(System.out::println),其中要求println(int),又避免了拳击.
| 归档时间: |
|
| 查看次数: |
3067 次 |
| 最近记录: |