【问题标题】:Java 8 groupBy and reduce not summing up values in the columnJava 8 groupBy 和 reduce 不汇总列中的值
【发布时间】:2022-01-27 09:05:14
【问题描述】:

我正在尝试使用 Java8 groupby 并减少基于分组对元素求和的功能,但代码似乎对我不起作用。

这是我试图在 Excel 表中映射和提取的 Dtolist 中的数据。

我的要求是,对于每个 DTO 对象,我希望根据 groupingBy TruckId 总结此公里数。因此,突出显示的列应该具有相同 TruckId(**Contract flotte)

的总和值

这是我的 DTO:

'''公共类 CostsTruckWsDTO 实现 Serializable {

private static final long serialVersionUID = 1L;

private String truckId;

private LocalDate period;

private Bigdecimal KilometersNumber;

private String periodStartDate;

这里是逻辑:: ''costsTruckWsDTO.setGroupBy(TruckId.toUpperCase());

Map mapCostsTruck = costTruck.stream() .collect(Collectors.groupingBy(d -> d.getGroupBy().toUpperCase())); for (Map.Entry entry : mapCostsTruck.entrySet()) {

        BigDecimal totalKm = entry.getValue().stream().map(x -> x.getKilometersNumber()).reduce(BigDecimal.ZERO,
                BigDecimal::add);

} }''

但我得到的是公里数的价值并没有按照屏幕截图添加。 任何人都可以帮助我在这里缺少什么!!! 非常感谢

【问题讨论】:

  • 您能否编辑您的问题 - 存在一些格式问题,导致阅读困难。当将不同的truckIds 分组到地图中时(在将它们的距离相加之前),你得到了预期的结果吗?
  • 你是如何构造costsTruck的?

标签: java-8 grouping reduce


【解决方案1】:

你可以使用两个收集器进行分组操作和求和操作:

Map<String, BigDecimal> result = trucks.stream()
               .collect(Collectors.groupingBy(CostsTruckWsDTO::getTruckId, 
                      Collectors.mapping(CostsTruckWsDTO::getKilometersNumber, Collectors.reducing(BigDecimal.ZERO, BigDecimal::add))));

【讨论】:

  • 您好,感谢您的回复。我看到我的分组已经到位,只是它没有总结并针对该领域进行设置。这是代码:
  • Map&lt;String, List&lt;CostsTrucksDTO&gt;&gt; mapCostsTruck = costsTruck.stream() .collect(Collectors.groupingBy(d -&gt; d.getGroupBy().toUpperCase())); //This above map is correct with correct grouping for (Map.Entry&lt;String, List&lt;CostsTrucksDTO&gt;&gt; entry : mapCostsTruck.entrySet()) { BigDecimal totalKm = BigDecimal.ZERO; totalKm = entry.getValue().stream().map(x -&gt; x.getKilometersNumber()).reduce(BigDecimal.ZERO, BigDecimal::add);}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-09
  • 1970-01-01
  • 2017-09-07
  • 2022-01-06
  • 2020-08-11
  • 1970-01-01
相关资源
最近更新 更多