将列表转换为多维地图

时间:2019-04-16 06:57:39

标签: java java-8

我想(使用 Java8 )将(JSON)数据列表转换为分层结构。

能否请您告诉我解决此问题的最佳方法是什么?

如何将阵列列表转换为多维图

问题类似于转换此内容

{
"server": "Manufacturer Co.",
"vehicles": [
    {
        "year": 2018,
        "model": "Ford Explorer (1)",
        "category": "4WD"
    },
    {
        "year": 2018,
        "model": "Ford Explorer (2)",
        "category": "4WD"
    },
    {
        "year": 2017,
        "model": "Ford Mustang (3)",
        "category": "2WD"
    }
    {
        "year": 2017,
        "model": "Ford Mustang 4WD (4)",
        "category": "4WD"
    }
}

进入

vehicles
-- year 2018
----- category: 4WD
---------- Ford Explorer (1)
---------- Ford Explorer (2)
-- year 2017
----- category: 2WD
---------- Ford Mustang (3)
----- category: 4WD
---------- Ford Mustang (4)

感谢您的时间

2 个答案:

答案 0 :(得分:4)

您应该使用多个groupingBy,然后使用mapping来收集要列出的模型属性。

我假设您有一个类似这样的模型:

public class Vehicle {
    private int year;
    private String model;
    private String category;

    //other 
}


Map<Integer,Map<String,List<String>>> result =  vehicles.stream()
            .collect(Collectors.groupingBy(Vehicle::getYear,
                    Collectors.groupingBy(Vehicle::getCategory, 
                            Collectors.mapping(Vehicle::getModel, Collectors.toList()))));

答案 1 :(得分:2)

有两种方法。第一个方法是创建一个Map的键YearMap的键Category的{​​{1}}。遍历所有车辆,如果不存在则创建一年的条目,如果不存在则添加类别,如果不存在则添加模型。

更优雅的方法是使用内存数据库。创建具有列Modelvehiclesyear的表category,然后使用以下查询它:

model