【问题标题】:Aggregate data in hashmap based on date根据日期聚合 hashmap 中的数据
【发布时间】:2020-07-03 22:55:07
【问题描述】:

我的 Spring Boot 后端管理应用和游戏。 我有评级对象,在这个评级对象中,并将评级历史保存在 HashMap 中

// Number of history by day
@ElementCollection(fetch = FetchType.EAGER)
private Map<String, Integer> ratingHistory = new HashMap<>();

我会有类似的东西:

"ratingHistory": {
  "07/01/2020": 12,
  "07/02/2020": 5,
  "07/03/2020": 0
}

这个 json 会增长...

我想显示一个图表,显示以下评分的演变: 本周:我将返回哈希图中的最后 7 个数据

当我想显示时如何聚合和返回处理后的数据:

  • 过去 30 天的评分演变(我想显示第 1 周(本周所有天数的总和)、第 2 周、第 3 周、第 4 周)
  • 过去 3 个月(5 月(本月所有天数的总和)、6 月、7 月)
  • 从应用开始...

我不知道如何正确处理它。 谢谢

【问题讨论】:

    标签: java angular spring jpa


    【解决方案1】:

    假设您使用的是 Java 8+,您应该将 Map&lt;String, Integer&gt; 更改为 NavigableMap&lt;LocalDate, Integer&gt;,实际上是 TreeMap

    这确保了键是可排序的,允许您调用subMap(LocalDate from, LocalDate to),这将在地图变得非常大时有所帮助。

    此外,使用LocalDate 可以更轻松地进行分组:

    关于如何使用 Java 8+ Streams 进行实际聚合,网上有很多例子,使用 collect(Collectors.groupingBy(...)),例如Group by and sum objects like in SQL with Java lambdas?.

    【讨论】:

    • 非常感谢。我用的是java 8,我换localDate再试一次
    猜你喜欢
    • 2021-11-17
    • 2023-02-04
    • 2021-07-30
    • 1970-01-01
    • 2018-01-09
    • 2013-06-06
    • 2021-07-22
    • 2016-07-27
    • 1970-01-01
    相关资源
    最近更新 更多