为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

千万里不及你 2021-11-17 10:21:26
为什么一种原始类型需要强制转换而另一种不需要?/* 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);}
查看完整描述

2 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

count()返回long而不是每个都long可以放入 ,int因此需要显式转换才能将结果存储到int. 这与 java-10 无关。它在以前的 JDK 中一直存在。


如果您不想投射,那么替代方法是:


...

.filter(n -> n < 0)

.map(e -> 1)

.sum();

但正如人们所看到的,这不像您的示例那样可读,因为代码本质上是说“给我一个通过过滤操作的元素的总和”,而不是“给我一个通过过滤操作的元素的计数”。


因此,最终如果您需要将结果作为int 类型,那么请进行演员表。


查看完整回答
反对 回复 2021-11-17
?
心有法竹

TA贡献1866条经验 获得超5个赞

count()Java IntStream类的方法已被定义为返回一个long值。从文档

long count() 返回此流中元素的计数。这是归约的一个特例,相当于:

 return mapToLong(e -> 1L).sum();

换句话说,这就是 Java 的设计方式,即它与 Lambda 无关。


查看完整回答
反对 回复 2021-11-17
  • 2 回答
  • 0 关注
  • 196 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信