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的一部分,并且一旦开始就可能有点好奇。