[英]Why does declaring a variable as type int require casting a stream? long type does not require a cast
為什么一種原始類型需要強制轉換而另一種則不需要強制轉換?
/* 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);
}
count()
返回long
並且不是每一個long
都可以容納一個int
因此需要顯式轉換來將結果存儲到int
。 這與java-10無關。 它在以前的JDK中一直存在。
如果您不想進行轉換,則可以選擇:
...
.filter(n -> n < 0)
.map(e -> 1)
.sum();
但正如人們所看到的那樣,這並不像您的示例那樣可讀,因為代碼本質上說的是“給通過過濾操作的元素求和 ”,而不是“給通過過濾操作的元素計數 ”。
因此,最終,如果您需要將結果作為整數,則可以進行強制轉換。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.