У меня есть требование, связанное с потоками в Java.
Мне нужно перебрать список объектов, где каждый объект имеет свойство Integer и свойство List.
Что мне нужно, так это то, что если одни и те же объекты имеют одинаковый идентификатор, мне нужно составить списки.
Позвольте мне проиллюстрировать пример с небольшим количеством простого кода:
Вот только определение 2 простых классов:
public static class Wrapper {
Integer id ;
List<Element> list;
public Wrapper(Integer id, List<Element> list) {
this.id = id;
this.list = list;
}
}
public static class Element {
String content ;
public Element(String content) {
this.content = content;
}
}
Теперь в методе Main Java создаем те же объекты для части примера:
List<Wrapper> list=new ArrayList();
ArrayList<Element> listForWrapper1= new ArrayList();
listForWrapper1.add(new Element("Content A"));
listForWrapper1.add(new Element("Content B"));
ArrayList<Element> listForWrapper2= new ArrayList();
listForWrapper2.add(new Element("Content C"));
listForWrapper2.add(new Element("Content D"));
ArrayList<Element> listForWrapper3= new ArrayList();
listForWrapper3.add(new Element("Content E"));
listForWrapper3.add(new Element("Content F"));
Wrapper wrapper1=new Wrapper(1,listForWrapper1);
Wrapper wrapper2=new Wrapper(2,listForWrapper2);
//Here this Wrapper has the same ID than wrapper2
Wrapper wrapper3=new Wrapper(2,listForWrapper3);
//Adding Elements to List
list.add(wrapper1);
list.add(wrapper2);
list.add(wrapper3);
Как видите, я добавляю в список 3 Обёртки, НО 2 из них имеют одинаковый идентификатор
Я хочу, чтобы идентификаторы Wrapper были одинаковыми в массиве, просто объедините оба списка. Таким образом, в этом примере результат должен быть:
Список с 2 элементами :
Элемент 1 : объект-обертка с идентификатором 1, с 2 элементами внутри его свойства списка, содержимого элемента A и содержимого элемента B
Элемент 2 : объект-оболочка с идентификатором 2, с 4 элементами внутри его свойства списка, содержимым элемента C, содержимым элемента D, содержимым элемента E и содержимым элемента F.
Как мне достичь этого результата с помощью Streams? Не могу придумать ни одного элегантного решения!
Заранее спасибо!
List<Wrapper> combinedList=list.stream().....