我正在尝试将对象列表转换为对象的另一个列表。但是我试图通过java8方式来选择使用带或不带流的最佳方式,以提高可读性。
让我说一个清单如下:
List<SomeObject> list = new ArrayList<SomeObject>;
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。
任何建议都值得赞赏和帮助。
答案 0 :(得分:2)
您似乎正在根据groupingBy
寻找var1
,然后从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());