gpt4 book ai didi

具有多个聚合的 Java 8 流分组依据

转载 作者:行者123 更新时间:2023-12-01 14:21:06 26 4
gpt4 key购买 nike

我正在尝试对我的流进行分组并在多个字段上聚合

IE。

private class Row {
private String sku;
private int colA; // sum
private int colB; // sum
private int colC; // avg
}

例子
  sku   colA    colB    colC
---------------------------
ar5sg5h 4 3 4
sd6ad6d 2 5 3
ar5sg5h 6 5 6
sd6ad6d 5 6 3
sd6ad6d 3 7 3

预期的:
 sku    colA    colB    colC
---------------------------
ar5sg5h 10 8 5.0
sd6ad6d 10 18 3.0

我已经有 List<Row> rows ,我有意向 减少 带有 的行groupBy 聚合 colA 和 colB 上的总和,其中 colC 上的平均值。

我怎样才能用 实现这一点groupBy + 多个 聚合使用 Java-8 ?

最佳答案

您是否正在寻找:

List<Row> result = rows.stream()
.collect(Collectors.groupingBy(Row::getSku))
.values().stream()
.map(e -> new Row(e.get(0).getSku(),
e.stream().mapToDouble(Row::getColA).sum(),
e.stream().mapToDouble(Row::getColB).sum(),
e.stream().mapToDouble(Row::getColC).average().getAsDouble()))
.collect(Collectors.toList());

注意:int 类型对您的情况没有帮助,我建议将其更改为两倍,因为平均值不是 int .

输出
Row(sku=sd6ad6d, colA=10.0, colB=18.0, colC=3.0)
Row(sku=ar5sg5h, colA=10.0, colB=8.0, colC=5.0)

关于具有多个聚合的 Java 8 流分组依据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60944644/

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