为什么将变量声明为 int 类型需要转换流?long 类型不需要强制转换

为什么一种原始类型需要强制转换而另一种不需要?


/* 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);

}


千万里不及你
浏览 197回答 2
2回答

慕神8447489

count()返回long而不是每个都long可以放入 ,int因此需要显式转换才能将结果存储到int. 这与 java-10 无关。它在以前的 JDK 中一直存在。如果您不想投射,那么替代方法是:....filter(n -> n < 0).map(e -> 1).sum();但正如人们所看到的,这不像您的示例那样可读,因为代码本质上是说“给我一个通过过滤操作的元素的总和”,而不是“给我一个通过过滤操作的元素的计数”。因此,最终如果您需要将结果作为int 类型,那么请进行演员表。

心有法竹

count()Java&nbsp;IntStream类的方法已被定义为返回一个long值。从文档:long count() 返回此流中元素的计数。这是归约的一个特例,相当于:&nbsp;return&nbsp;mapToLong(e&nbsp;->&nbsp;1L).sum();换句话说,这就是 Java 的设计方式,即它与 Lambda 无关。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java