java - 转换列表列表在 Java 8 中
问题描述
我正在尝试将对象列表转换为另一个对象列表。但是我正在尝试通过 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。
任何建议都会受到赞赏和帮助。
解决方案
您似乎正在寻找groupingBy
基于var1
然后mapping
tovar2
作为值列表。这可以这样做:
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 - 将字符串转换为保留小数位的浮点数
- php - 如何使用 jQuery 和 AJAX 处理多个复选框更改事件?
- ffmpeg - 来自具有长冻结尾端的源的 FFmpeg 延时
- c - linux执行shell脚本,将某些内容回显到文件中
- asp.net-mvc - 无法使用 Asp.net Mvc Json 在下拉菜单上加载数据
- javascript - 如何在 web 项目中包含 jsonpipe
- javascript - 想要使用 show_menus 数组显示子菜单
- bit-manipulation - 具有恒定差异和按位与零的对数
- javascript - 当用户使用反应在输入字段中键入第二个@时如何显示建议下拉列表?
- javascript - Ajax 加载方法不在 div 顶部加载