Java 将列表转换为多维映射

Java 将列表转换为多维映射,java,java-8,Java,Java 8,我想(使用Java8)将(JSON)数据列表转换为层次结构 你能告诉我处理这件事的最好办法是什么吗 如何将阵列列表转换为多维映射 问题类似于将其转换为: { "server": "Manufacturer Co.", "vehicles": [ { "year": 2018, "model": "Ford Explorer (1)", "category": "4WD" }, { "year": 2018,

我想(使用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)

感谢您抽出时间

有两种方法。第一种方法是创建一个
Map
,键为
Map
s的
Year
,键为
Model
s的
Category
。迭代所有车辆,如果不存在,则创建一个一年的条目,如果不存在,则添加一个类别,如果不存在,则添加一个模型

更优雅的方法是使用内存中的数据库。创建一个表
vehicles
,其中包含列
year
category
model
,然后使用以下内容进行查询:

select year, category, model
from   vehicle
order by year, category;

您应该使用多个
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()))));
公共级车辆{
私人国际年;
私有字符串模型;
私有字符串类别;
//其他
}
地图结果=vehicles.stream()
.收集(收集器).分组方式(车辆::getYear,
收集器。分组依据(车辆::getCategory,
Collectors.mapping(Vehicle::getModel,Collectors.toList());

如果要将ArrayList对象转换为映射,则需要向我们显示该列表的定义和内容,而不是一些json结构。为你的列表添加代码,并尝试将其转换为地图。哇!你救了我一周!非常感谢你!