Usually after a flatMap, we use collect(Collectors.toList()) to collect data and return a List.
But why can't I use Collectors::toList instead? I tried to use it, but got a compilation error.
I tried to search this, but cannot find any explanation.
Many thanks.
You are calling the <R, A> R collect(Collector<? super T, A, R> collector) method of the Stream interface. Collectors.toList() returns a Collector<T, ?, List<T>>, which matches the required type of the collect method's argument. Therefore someStream.collect(Collectors.toList()) is correct.
On the other hand, the method reference Collectors::toList cannot fit as a parameter for the collect method, since a method reference can only be passed where a functional interface is required, and Collector is not a functional interface.
You could have passed Collectors::toList to a method that requires a Supplier<Collector>. Similarly, you can assign it to such a variable:
Supplier<Collector<Object,?,List<Object>>> supplierOfListCollector = Collectors::toList;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With