【发布时间】:2019-07-08 14:33:35
【问题描述】:
我正在尝试将一个对象列表转换为另一个对象列表。但我正在尝试通过 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 值保存在字符串列表中。示例如下:
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。
任何建议都会受到赞赏和帮助。
【问题讨论】:
-
IMO 你不需要创建新对象!(AnotherObject)。你为什么不使用
Map<String,List<String>>在这种情况下你可以有简单的方法。list.stream() .collect(Collectors.groupingBy(SomeObject::getVar1, Collectors.mapping(SomeObject::getVar2, Collectors.toList()))); -
@HadiJ 我目前正在使用地图。但我想使用一个对象,考虑到未来可能会有增强,如果我们将它用作对象,这可能会变得容易。感谢您的回复:)
标签: java list java-8 java-stream