gpt4 book ai didi

Java Lambda Stream group By 和求和整数值/平均值

转载 作者:行者123 更新时间:2023-11-30 06:41:54 27 4
gpt4 key购买 nike

我有一个客户对象列表列表(客户:int id、bool isActive、int billingCount,...),并且想要 billingCount 的总和和平均值。不幸的是,我的代码不起作用。我需要如何更改代码才能使其正常工作?

总和和平均灵魂看起来像这样:

真实1234

假1234

 Map<Boolean, Integer> sum = customer.stream()
.map(c -> c.getIsActive())
.collect(Collectors.groupingBy(c -> c, Collectors.summingInt(Customer::getBillingCount)));


Map<Boolean, Integer> average = customer.stream()
.map(c -> c.getIsActive())
.collect(Collectors.groupingBy(c -> c, Collectors.averagingInt(Customer::getBillingCount)));
}

我收到以下错误:

Error:(146, 17) java: no suitable method found for collect(java.util.stream.Collector<Customer,capture#1 of ?,java.util.Map<java.lang.Object,java.lang.Integer>>)
method java.util.stream.Stream.<R>collect(java.util.function.Supplier<R>,java.util.function.BiConsumer<R,? super java.lang.Boolean>,java.util.function.BiConsumer<R,R>) is not applicable
(cannot infer type-variable(s) R
(actual and formal argument lists differ in length))
method java.util.stream.Stream.<R,A>collect(java.util.stream.Collector<? super java.lang.Boolean,A,R>) is not applicable
(inference variable T has incompatible bounds
lower bounds: java.lang.Object,Customer
lower bounds: java.lang.Boolean)

最佳答案

与您的map来电,您正在转换您的Stream<Customer>Stream<Boolean> ,或者关于活跃和不活跃客户的一系列正确和错误的信息。您无法调用客户的getBillingCount关于 boolean 值。

您可以使用the partitioningBy Collector按 boolean 值分组,无需先验 map称呼。下游收集器可以是 summarizingInt Collector同时收集总和和平均值(加上您可能不需要的其他一些:计数、最大值、最小值)。

Map<Boolean, Integer> stats = customer.stream()
.collect(Collectors.partitioningBy(Customer::getIsActive,
Collectors.summarizingInt(Customer::getBillingCount)));

这将为您提供 true 的统计数据和false在一份声明中。

关于Java Lambda Stream group By 和求和整数值/平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54429987/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com