public static <T,C extends Collection<T>> Collector<T,?,C> toCollection(Supplier<C> collectionFactory)
简述一下就是把集合中的元素转换成参数指定的集合类型进行保存。
看个例子:
void test42() {
List<Integer> list = List.of(2,5,8,9,4,20,11,43,55);
ArrayList al = list.stream().collect(Collectors.toCollection(ArrayList::new));
al.stream().forEach(System.out::print);
}
运行结果:2589420114355
很容易理解,把List中的数据保存到ArrayList中。再看看方法的定义,C extends Collection<T>根据这个定义我们可以确定我们可以转换的数据类型范围为所有实现Collection<E>接口的实现类或其子类。如下示例:
RoleList rl = list.stream().collect(Collectors.toCollection(RoleList::new));
HashSet hs = list.stream().collect(Collectors.toCollection(HashSet::new));
你这个时候如果弄个HashMap类型不对肯定报错,或者你弄实现Collection的接口它也new不了所以还是报错。