Есть три класса: A
, B
и C
. Класс C
содержит поле List<B>
, класс B
содержит поле List<A>
. Класс A
никакой информации о B
и C
не имеет. Дан список объектов типа C
. Необходимо с помощию stream API
по этому списку получить карту, где каждому объекту типа A
соответствует список тех объектов типа B
, которые его содержат. Например, при такой конфигурации :
C c1 = {b1,b2};
C c2 = {b2};
B b1 = {a1,a2};
B b2 = {a3, a2};
A a1, a2, a3;
получить что-то вроде:
a1 - b1
a2 - b1, b2, b2 // повторяется 2 раза, т.к. b2 встречается и в c1, и в c2
a3 - b2, b2 // аналогично
Всё это должно выглядеть примерно так:
List<C> c_s = Arrays.asList(c1,c2);
Map<...,...> map = c_s.stream()
.map(...)
//...
.collect(...);
Дополнительную информацию в A
,B
и C
вводить нельзя, возможно, стоит добавить какие-то дополнительные классы.
пропущу описание классов A, B, C
A a1 = new A();
A a2 = new A();
A a3 = new A();
B b1 = new B();
b1.aList.add(a1);
b1.aList.add(a2);
B b2 = new B();
b2.aList.add(a3);
b2.aList.add(a2);
C c1 = new C();
c1.bList.add(b1);
c1.bList.add(b2);
C c2 = new C();
c2.bList.add(b2);
Map<A, List<Object>>res = new HashMap<>();
Arrays.asList(c1, c2).stream()
.forEach(cElems -> // проходимся по элементам c1 и c2
cElems.bList.forEach(bElems -> // элементы класса В
bElems.aList.forEach(
aElems -> { // элементы класса А
if(res.containsKey(aElems)) // если уже есть объект A
{
res.get(aElems).add(bElems); // то добавляем к существующему
}else { // иначе новый создаем
List<Object> bs = new ArrayList<>();
bs.add(bElems);
res.put(aElems, bs);
}
}))
);
System.out.println(res.size());
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Доброго времени! Подскажите как передать значение из input в value?
Здравствуйте, не подскажите как можно сделать одинаковый дизайн (или хотя бы немного похожий) стандартного видео плеера на всех браузерах...
У меня есть довольно сложное, динамически созданное svg изображение, которое было реализовано с помощью плагина - jQuery SVGЯ хотел бы создать область...