【问题标题】:Convert List into Map of Maps [closed]将列表转换为地图 [关闭]
【发布时间】:2020-01-10 12:42:21
【问题描述】:

我有一个包含以下字段的对象列表:

public final UUID uuid;
public final LocalDate date;
public final long value;

我想将其转换为Map<UUID, Map<LocalDate, Long>>,但同时我需要按日期对值求和。

所以有这样的数据:

UUID | LocalDate | Long
uuid1| 2012-12-10| 100
uuid1| 2012-12-11| 200
uuid2| 2012-12-10| 300
uuid2| 2012-12-10| 200

我想拥有:

uuid1: {
   [2012-12-10, 100],
   [2012-12-11, 200]
},
uuid2: {
   [2012-12-10, 500]
}

是否可以使用 Stream API 来实现?

【问题讨论】:

  • 到目前为止你尝试过什么?
  • 如果你给出了一些类结构和数据,我会尝试。只是问有没有可能,然后回答是总是有可能的。

标签: java collections java-stream


【解决方案1】:

如果你的类使用 setter 和 getter 看起来像这样

public class SomeObject {
        public   UUID uuid;
        public  LocalDate date;
        public  Long value;

您可以使用Collectors.groupingBy 的变体,它接受一个分类器函数和另一个收集器,按 uuid 分组并收集对象到地图

Map<UUID, Map<LocalDate, Long>> collect = someObjects.stream()
                .collect(Collectors.groupingBy(SomeObject::getUuid,
                        Collectors.toMap(SomeObject::getDate, SomeObject::getValue,Long::sum)));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多