Как разложить List<Some> в Map

91
16 мая 2021, 08:10

Есть такой класс

class Some {
S s;
String s1;
B b;
}
class B {
List<C> listOfC;
}
class C {
List<D> listOfD;
}
class D {
Long l;
}
class S {
String string;
}

Подскажите как с помощью Java 8 разложить в такую структуру

Map<S string, Map<String s1, Map<Long l, List<D>>>>
Answer 1

А попробуйте этим алгоритмом вашу супер-структуру разобрать:

List<Some> someList = ...;
Map<String, Map<String, Map<Long, List<D>>>> items = new HashMap<>();
for (Some some : someList) {
    Map<String, Map<Long, List<D>>> sub = items.computeIfAbsent(some.s.string, k -> new HashMap<>());
    Map<Long, List<D>> sub2 = sub.computeIfAbsent(some.s1, k -> new HashMap<>());
    for (C c : some.b.listOfC) {
        for (D d : c.listOfD) {
            sub2.computeIfAbsent(d.l, k -> new ArrayList<>()).add(d);
        }
    }
}
READ ALSO
Не компилируется класс без указания пакета

Не компилируется класс без указания пакета

Только начинаю учить Java, скачал Intellij IDEAИ пробую скомпилировать самый обычную программу

81
wait, notify, synchronized Java

wait, notify, synchronized Java

Нужна помощь в задаче: Нужно, чтобы поток Write увеличивал значение числа на 1 и после каждого увеличения блокировался, а поток Reader выводил данное...

118
Как выделить из строки числа?

Как выделить из строки числа?

В массиве есть множество строк вида: "\\*{5,8}" и "\\*

125
Как запретить удаление первых символов в input?

Как запретить удаление первых символов в input?

Есть поле ввода (input), в котором через JavaScript автоматом прописывается начальное значение из трех символовС помощью такого скрипта я запрещаю...

94