我正在尝试将一个对象列表转换为另一个对象列表。但我正在尝试通过具有更高可读性的 java8 方式选择使用或不使用流的最佳方式。
假设我有如下列表:
List<SomeObject> list = new ArrayList<SomeObject>;
一些对象:
public class SomeObject{
private String var1;
private String var2;
private String var3;
private String var4;
//getters and setters
}
另一个对象:
public class AnotherObject{
private String var1;
private List<String> var2;
//getters and setters
}
但是在另一个对象中,如果多个对象的 var1 相同,我想将 var2 值保存在 String 列表中。示例如下:
SomeObject so = new SomeObject();
so.setVar1("key1");
so.setVar2("value1");
SomeObject so1 = new SomeObject();
so1.setVar1("key2");
so1.setVar2("value2");
SomeObject so2 = new SomeObject();
so2.setVar1("key2");
so2.setVar2("value3");
list.add(so);
list.add(so1);
list.add(so2);
现在从上面的列表中,我想创建仅包含 var1 和 var2 的 AnotherObject 列表,如果两个 SoemObject 中的 var1 相同,那么我想要列表中的 var2 值并将其保存为 var1。
任何建议都会受到赞赏和帮助。
最佳答案
你似乎在寻找基于 var1
的 groupingBy
然后 mapping
到 var2
作为列表值。这可以这样做:
List<AnotherObject> anotherList = list.stream()
.collect(Collectors.groupingBy(
SomeObject::getVar1, Collectors.mapping(
SomeObject::getVar2, Collectors.toList())))
.entrySet().stream()
.map(e -> new AnotherObject(e.getKey(), e.getValue()))
.collect(Collectors.toList());
关于java - 在 Java 8 中将 List<SomeObject> 转换为 List<AnotherObject>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56937202/