Collectors.toList()返回的收集器类型

我对Collectors.toList()和Collectors.toSet()静态方法感到很困惑。 这两种方法不接受任何参数。 那么他们如何知道要返回的收集器类型呢?

例如,如果我们有这一行:

Collectors.toList(); 

返回的收集器是Collector<Object,?,List>

如果我们有这条线:

 Collector<Integer,?,List> c = Collectors.toList(); 

然后Collectors.toList()将返回一个Collector<Integer,?,List> 。 如果不接受任何输入参数,toList()方法如何知道它需要返回一个Collector<Integer,?,List>

也许编写toList()的示例代码对我的理解很有帮助。

提前致谢。

此function在generics类型推断中作为目标类型引入。

Java编译器利用目标类型来推断generics方法调用的类型参数 。 表达式的目标类型是Java编译器所期望的数据类型,具体取决于表达式的显示位置。

例如:

 // v--- the generic parameter `T` is inferred by the target type Collector> c = Collectors.toList(); // v--- the unbounded type parameter is extends `Object` Collectors.toList(); 

假设您想要将偶数整数列表收集到另一个列表中。

你可以这样写:

 // assume that integerList contains ints between 1 and 20 List evenInts = integerList.stream().filter(x -> x % 2 == 0) .collect(Collectors.toList()); 

collect是流中的终端操作 ,并且期望返回由R绑定的类型,在这种情况下,转换为List 。 这就是它如何适当地收集你的元素。

我们鼓励您仔细阅读有关Collector更多信息 ,因为它是较新的Java 8 Stream API的一部分,并且一旦开始就可能有点好奇。