有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (2) 个答案

  1. # 1 楼答案

    您正在调用Stream接口的<R, A> R collect(Collector<? super T, A, R> collector)方法Collectors.toList()返回一个Collector<T, ?, List<T>>,它与collect方法参数的必需类型匹配。因此someStream.collect(Collectors.toList())是正确的

    另一方面,方法引用Collectors::toList不能作为collect方法的参数,因为方法引用只能在需要函数接口的地方传递,而Collector不是函数接口

    您可以将Collectors::toList传递给需要Supplier<Collector>的方法。类似地,您可以将其分配给这样一个变量:

    Supplier<Collector<Object,?,List<Object>>> supplierOfListCollector = Collectors::toList;
    
  2. # 2 楼答案

    请看@Eran答案,因为它比我的答案更详细,但如果有人想要一个简单的解释:

    你不能改变:

    collect(Collectors.toList())collect(Collectors::toList)

    你只能改变:

    collect(() -> Collectors.toList())collect(Collectors::toList)