Потому что groupingBy()
ожидает Function
, то есть то, что принимает один аргумент и возвращает что-то.
Function.identity()
возвращает функцию.
Но Function::identity
ссылается на метод identity()
, который не принимает никаких аргументов, и поэтому не может использоваться в качестве функции.
Аналогично, groupingBy()
ожидает в качестве второго аргумента экземпляр Collector
. Collectors.counting()
возвращает коллекционера. Таким образом, вы можете использовать это. Но Collector::counting
ссылается на метод counting()
, и одного метода, не имеющего аргументов, вообще недостаточно для реализации интерфейса Collector, который имеет 5 методов.
Чтобы сделать автомобильную аналогию, если Вы вызываете метод, ожидающий автомобиль, вы можете вызвать garage.getCar()
, чтобы получить автомобиль и передать возвращенный автомобиль в качестве аргумента. Но проходить garage::getCar
не имеет смысла, потому что это будет «то, что может дать вам машину». И это не может считаться Транспортным средством.