如何在Java中从列表创建Map of Map

问题描述 投票:0回答:1

我有一个根对象列表 rootList;

class Root {
    int level;
    String path;
    String site_id
}

在此对象中,级别和路径不是唯一的。为了带来独特性, 我想将 rootList 转换为

Map<level, Map<Path, List<Root>> sites;

如果我使用 Stream Foreach,我无法获取列表,并且这种方法根本不起作用。请帮助我带来这个结构。

rootList.stream().forEach(root -> sites.put(root.getLevel(), root.getPath())).;
java list java-8 hashmap java-stream
1个回答
0
投票

您可以使用

Collectors
来执行此操作:

首先使用

groupingBy
收集器创建顶级地图,该收集器使用另一个
groupingBy
收集器创建每个子地图,并由
toList
填充值。

package com.example.so;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;


public class Eg {


    public static void main(String[] args) {
        List<Root> roots = List.of(
                new Root(1, "A", "B"),
                new Root(1, "A", "C"),
                new Root(2, "A", "B"),
                new Root(2, "A", "C"),
                new Root(1, "Z", "B"),
                new Root(1, "Z", "C"),
                new Root(2, "Z", "B"),
                new Root(2, "Z", "C")
        );
        Map<Integer, Map<String,List<Root>>> maps = roots.stream().collect(Collectors.groupingBy(
                Root::level,
                Collectors.groupingBy(Root::path, Collectors.toList())
        ));
        System.out.println(maps);
    }

}

record Root(int level, String path, String siteId) {
}
© www.soinside.com 2019 - 2024. All rights reserved.