簡體   English   中英

為什么將變量聲明為int類型需要強制轉換流? 長型不需要強制轉換

[英]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);
}

Java IntStream類的count()方法已定義為返回一個long值。 文檔中

long count()返回此流中元素的數量。 這是減少的一種特殊情況,它等效於:

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

換句話說,這就是Java的設計方式,即與Lambda無關。

count()返回long並且不是每一個long都可以容納一個int因此需要顯式轉換來將結果存儲到int 這與java-10無關。 它在以前的JDK中一直存在。

如果您不想進行轉換,則可以選擇:

...
.filter(n -> n < 0)
.map(e -> 1)
.sum();

但正如人們所看到的那樣,這並不像您的示例那樣可讀,因為代碼本質上說的是“給通過過濾操作的元素求和 ”,而不是“給通過過濾操作的元素計數 ”。

因此,最終,如果您需要將結果作為整數,則可以進行強制轉換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM