我对运行此代码有疑问。
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 ,所以这个值从哪里来,我也知道Array的大小,所以java如何知道我期望这个值?我期望将List值用作参数,所以我可以做一个简单的 List :: size ,因此对于我的组生成List来说,这更容易理解,因此列表本身作为参数传递,您可以想要,但已经是 .size()
有人可以指导我做这些事情吗?也许不是list.size()吗?如果可以的话,如何计算计数值?