我有一个与 Java 中的 Streams 相关的要求。我需要遍历一个对象列表,其中每个对象都有一个 Integer 属性和一个 List 属性。
我需要的是,如果相同的对象具有相同的 ID,我需要连接列表。让我用一些简单的代码来说明这个例子:
这里只定义了 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 方法中,为示例的 porpuse 创建相同的对象:
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 个具有相同的 ID
我想要的是当包装器 ID 在数组中相同时,只需合并两个列表。所以在这个例子中,结果应该是:
包含 2 个元素的列表:
元素 1 :ID 为 1 的包装对象,其列表属性中有 2 个元素,元素内容 A 和元素内容 B
元素 2:ID 为 2 的包装对象,其列表属性中有 4 个元素,元素内容 C、元素内容 D、元素内容 E 和元素内容 F。
如何使用 Streams 实现此结果?我想不出任何优雅的解决方案!
提前致谢!
List<Wrapper> combinedList=list.stream().....
守着一只汪
HUWWW
胡子哥哥
相关分类