Поток Java 8 с GroupBy с Collectors.summarizingInt () - PullRequest
1 голос
/ 06 июля 2019

У меня вопрос о запуске этого кода.

private void groupingByMethod(final List<Integer>values){
    //I THOUGHT THAT e was a List but is a int already  
    final ToIntFunction<Integer>summingFunction = e->{
        return e;
    };
    values.stream()
            .collect(Collectors.groupingBy(Function.identity(),Collectors.mapping(Function.identity(),Collectors.summarizingInt(summingFunction))))
            .forEach((a,b)->System.out.println(a+" "+b));
}

Если я запускаю тестирование этого кода с данными.

private final List<Integer>data = Arrays.asList(3,3,1,2,4);

Я получаю ожидаемые данные.

1 IntSummaryStatistics{count=1, sum=1, min=1, average=1,000000, max=1}
2 IntSummaryStatistics{count=1, sum=2, min=2, average=2,000000, max=2}
3 IntSummaryStatistics{count=2, sum=6, min=3, average=3,000000, max=3}
4 IntSummaryStatistics{count=1, sum=4, min=4, average=4,000000, max=4}

Конечно, в моем коде я использую вложенный Collectors.collectingAndThen, но это то же самое.это для того, чтобы сделать код проще.

Так что все работает как шарм, так в чем же проблема, верно?

У меня вопрос к параметру

 Collectors.summarizingInt(summingFunction)

Я знаю, чтоCollectors.summarizingInt ожидает toIntFunction , поэтому откуда берется это значение, я также знаю, что это размер массива, так как java может знать, что я ожидаю это значение?Я ожидал значение List в качестве параметра, чтобы я мог просто сделать List :: size , так что это более понятно для моей группы, генерирующей список, так что сам список передается в качестве параметра, и вы хотитеВы хотите этого, но .size () уже

Может кто-нибудь помочь мне с этим?Возможно, это не list.size ()?если да, то как рассчитывается значение счетчика?

...