Java: преобразование списка объектов в хеш-карту внутри другой хеш-карты - PullRequest
4 голосов
/ 17 апреля 2020

У меня есть список объектов, которые я хочу преобразовать в карту ha sh. Можно ли создать ha sh -карту этого типа Map<String, Map<String, List<Object>>?

Причина этого заключается в том, что мне нужно отсортировать их по некоторым свойствам в объектах, чтобы я мог повторить их позже. Итак, ниже Json того, как выглядят объекты в данный момент:

[
  object1: {plan: "11", relationship: "A", etc...},
  object2: {plan: "12", relationship: "A", etc...},
  object3: {plan: "11", relationship: "B", etc...},
]

Я пытался использовать Collectors, чтобы получить HashMap, но я путаюсь со вторым га sh карта, я не могу получить список отношений в Map.

Map<String, Map<String, List<myObject>> myHash = objectList
    .stream()
    .collect(Collectors.toMap(myObject::plan, 
        a -> a.stream().collect(Collectors.groupingBy(myObject::relationship))));

То, что я хочу получить, выглядит примерно так

[
  {
    key: "11", 
    value: [
             {key: "A", value: [ object1 ]},
             {key: "B", value: [ object3 ]}
           ]
  },
  {
    key: "12",
    value: [{key: "A", value: [ object2 ]}]
  }
]

1 Ответ

4 голосов
/ 17 апреля 2020

Вы можете группировать дважды, при этом сборщик группировки «отношения» является нижестоящим по отношению к сборщику группировки «план»:

Map<String, Map<String, List<myObject>> myHash = objectList
    .stream()
    .collect(Collectors.groupingBy(myObject::getPlan, 
                Collectors.groupingBy(myObject::getRelationship)));

Это создаст группы «отношения» в каждой группе «план».

...