Java 在地图列表中分隔每个地图

Java 在地图列表中分隔每个地图,java,collections,Java,Collections,我有一张地图:map 我想对内部映射的每个值执行操作。 我在地图中的数据示例: <1, Map<2018-12-01, "A"> <2018-12-02, "A"> <2018-12-03, "A"> <2018-12-04, "A"> <2018-12-05, "A">> <2, Map<2018-12-01, "B"> <20

我有一张地图:
map
我想对内部映射的每个值执行操作。 我在地图中的数据示例:

<1, Map<2018-12-01, "A">
       <2018-12-02, "A">
       <2018-12-03, "A">
       <2018-12-04, "A">
       <2018-12-05, "A">>

<2, Map<2018-12-01, "B">
       <2018-12-02, "B">
       <2018-12-03, "B">
       <2018-12-04, "B">
       <2018-12-05, "B">>

<3, Map<2018-12-01, "C">
       <2018-12-02, "C">
       <2018-12-03, "C">
       <2018-12-04, "C">
       <2018-12-05, "C">>

您可以使用
flatMap
获取所有内部映射条目的
,然后根据需要收集它们:

Map<Integer, Map<LocalDate, CustomObject>> input = ...

Map<LocalDate,List<CustomObject>> grouped =
    input.values() // Collection<Map<LocalDate, CustomObject>>
         .stream() // Stream<Map<LocalDate, CustomObject>>
         .flatMap(m -> m.entrySet().stream()) // Stream<Map.Entry<LocalDate, CustomObject>>
         .collect(Collectors.groupingBy(Map.Entry::getKey,
                                        Collectors.mapping(Map.Entry::getValue,
                                                           Collectors.toList())));
Map输入=。。。
地图分组=
input.values()//集合
.stream()//流
.flatMap(m->m.entrySet().stream())//流
.collect(Collectors.groupingBy(Map.Entry::getKey、,
Collectors.mapping(Map.Entry::getValue,
收藏家;

您可以迭代外部和内部映射,并将条目添加到新的多重映射中:

Map<LocalDate, List<CustomObject>> result = new LinkedHashMap<>();
yourMap.forEach((k1, v1) -> 
     v1.forEach((k2, v2) -> 
         result.computeIfAbsent(k2, k -> new ArrayList<>()).add(v2)));
Map result=newlinkedhashmap();
yourMap.forEach((k1,v1)->
v1.forEach((k2,v2)->
computeIfAbsent(k2,k->newArrayList()).add(v2));

这将使用
Map.computeIfAbsent
创建一个新列表,如果没有该键的条目。然后将
CustomObject
实例添加到列表中。这里,
k1
是外部映射的键,
v1
是内部映射,
k2
LocalDate
v2
CustomObject
实例。

您使用的JDK版本更像是一个Map@MS90根据OP所述的预期输出-
2018-12-01:A+B+C.
,我想我发布的可能是期望的输出。我不知怎么写在你的答案下面,我参考了他的“我有一个映射:映射我想对内部映射的每个值执行操作。映射中数据的示例:”这并没有直接给我预期的结果,但98%是这样做的。然后我需要合并CustomObject的分组列表实例以获得所需的输出。谢谢@Eran
Map<Integer, Map<LocalDate, CustomObject>> input = ...

Map<LocalDate,List<CustomObject>> grouped =
    input.values() // Collection<Map<LocalDate, CustomObject>>
         .stream() // Stream<Map<LocalDate, CustomObject>>
         .flatMap(m -> m.entrySet().stream()) // Stream<Map.Entry<LocalDate, CustomObject>>
         .collect(Collectors.groupingBy(Map.Entry::getKey,
                                        Collectors.mapping(Map.Entry::getValue,
                                                           Collectors.toList())));
Map<LocalDate, List<CustomObject>> result = new LinkedHashMap<>();
yourMap.forEach((k1, v1) -> 
     v1.forEach((k2, v2) -> 
         result.computeIfAbsent(k2, k -> new ArrayList<>()).add(v2)));