为什么一个原始类型需要铸造而另一个不需要铸造?
/* This method uses stream operations to count how many numbers in a given array
* of integers are negative
*/
public static void countNegatives(int[] nums) {
long howMany = stream(nums) // or: int howMany = (int) stream(nums)
.filter(n -> n < 0)
.count();
System.out.print(howMany);
}
Run Code Online (Sandbox Code Playgroud)
count()Java IntStream类的方法已定义为返回long值.从文档:
long count()返回此流中元素的数量.这是减少的特殊情况,相当于:
return mapToLong(e -> 1L).sum();
Run Code Online (Sandbox Code Playgroud)
换句话说,这就是Java的设计方式,即它与Lambda没什么关系.
count()返回long而不是每个都long可以适合,int因此需要显式转换将结果存储到int.这与java-10无关.它一直存在于以前的JDK中.
如果你不想投,那么替代方案将是:
...
.filter(n -> n < 0)
.map(e -> 1)
.sum();
Run Code Online (Sandbox Code Playgroud)
但是正如人们可以看到这不像你的例子那样可读,因为代码本质上是说"给我一个通过过滤操作的元素的总和 ",而不是"给我一个通过过滤操作的元素的计数 ".
因此,最终如果您需要将结果作为int,那么请选择演员.
| 归档时间: |
|
| 查看次数: |
47 次 |
| 最近记录: |