#java #java-8
#java #java-8
Вопрос:
Я хотел бы преобразовать (с помощью Java8) список (JSON) данных в иерархическую структуру.
Не могли бы вы сказать мне, какой наилучший способ справиться с этим?
Как я могу преобразовать arraylist в многомерную карту?
Проблема заключается в чем-то вроде преобразования этого:
{
"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)
Спасибо за ваше время
Комментарии:
1. Если вы хотите преобразовать объект ArrayList в карту, вам нужно показать нам определение и содержимое этого списка, а не какую-либо структуру json. Добавьте код для вашего списка и то, что вы пробовали при преобразовании его в карту.
Ответ №1:
Вы должны использовать несколько 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:
Существует два подхода. Первым было бы создать a Map
с ключом Year
Map
s с ключом Category
Model
s. Выполните итерацию по всем транспортным средствам, создайте запись за год, если она не существует, добавьте категорию, если она не существует, и добавьте модель, если она не существует.
Немного более элегантным подходом было бы использовать базу данных в памяти. Создайте таблицу vehicles
со столбцами year
, category
model
а затем запросите ее с помощью:
select year, category, model
from vehicle
order by year, category;