[英]Type of Collector returned by Collectors.toList()
我對Collectors.toList()和Collectors.toSet()靜態方法感到困惑。 這兩種方法不帶任何參數。 那么,他們如何知道要返回哪種類型的收集器?
例如,如果我們有這行:
Collectors.toList();
返回的收集器是Collector<Object,?,List<Object>>
。
如果我們有這行:
Collector<Integer,?,List<Integer>> c = Collectors.toList();
然后Collectors.toList()將返回Collector<Integer,?,List<Integer>>
。 在不接受任何輸入參數的情況下,toList()方法如何知道它需要返回Collector<Integer,?,List<Integer>>
?
可能如何編寫toList()的示例代碼可能對我的理解有所幫助。
提前致謝。
此功能在通用類型推斷中作為目標類型引入。
Java編譯器利用目標類型來推斷通用方法調用的類型參數 。 表達式的目標類型是Java編譯器期望的數據類型,具體取決於表達式出現的位置。
例如:
// v--- the generic parameter `T` is inferred by the target type
Collector<Integer,?,List<Integer>> c = Collectors.toList();
// v--- the unbounded type parameter is extends `Object`
Collectors.toList();
假設您要將一個偶數列表收集到另一個列表中。
您可以這樣寫:
// assume that integerList contains ints between 1 and 20
List<Integer> evenInts = integerList.stream().filter(x -> x % 2 == 0)
.collect(Collectors.toList());
collect
是流中的終端操作 ,並且期望返回受R
約束的類型,在這種情況下,該類型將轉換為List<Integer>
。 這樣便可以適當地收集您的元素。
我們鼓勵您仔細閱讀有關Collector
更多信息 ,因為它是較新的Java 8 Stream API的一部分,一旦開始,可能有點好奇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.