Почему я не могу использовать лямбду вместо ссылки на метод в Collectors.groupingBy? - PullRequest
0 голосов
/ 08 ноября 2019

В функции Java 8 Stream.collect, когда я использую Collectors.groupingBy(), я замечаю, что параметр может быть

Function<? super T,​? extends K> classifier

Здесь я должен использовать ссылку на метод ::. Почему я не могу использовать лямбду вместо этого?

public  class TransAction{
     public TransAction(String s,Integer v) {
        str=s;
        value=v;
     }
     private String str;
     private Integer value; 
     //getter/setters...
}
//in main()
TransAction[] a = { new TransAction("small", 41), ..., new TransAction("big", 122) };
Map<String, List<TransAction>> c = Arrays.stream(a).collect(Collectors.groupingBy(TransAction::getStr));
//Arrays.stream(a).collect(Collectors.groupingBy((a)->a.getStr()));

1 Ответ

3 голосов
/ 08 ноября 2019

Конечно, вы можете, только не используйте дважды одно и то же имя a

Map<String, List<TransAction>> c = Arrays.stream(a)
                                         .collect(Collectors.groupingBy(s -> s.getStr()));
...