gen*_* b. 2 java collections pojo java-stream
新手问题。我有一个原始的豆从数据库逐行
public class DataBean {
private Integer employeeId;
private String org;
private String comments;
// + Constructors, getters/setters
}
Run Code Online (Sandbox Code Playgroud)
我需要将其映射到具有多个Org的另一个Bean,这些组织按Employee ID分组到一个列表中。雇员ID的唯一组织可以是多个;“评论”字段必定是相同的。
public class CustomDataBean {
private Integer employeeId;
private List<String> orgs;
private String comments;
// + Constructors, getters/setters
}
Run Code Online (Sandbox Code Playgroud)
努力入门。想到groupingBy了以下内容,但返回了Map,而我没有建立子列表。
Map<Integer, List<String>> temp = origData.stream().collect(
Collectors.groupingBy(OrigBean::getEmployeeId,
/* 2nd param? */ .. ))
Run Code Online (Sandbox Code Playgroud)
我的目标是转变List<CustomDataBean>。
您可以使用以下命令:
List<CustomDataBean> result = origData.stream()
.collect(Collectors.groupingBy(DataBean::getEmployeeId))
.entrySet().stream()
.map(e -> new CustomDataBean(
e.getKey(),
e.getValue().stream().map(DataBean::getOrg).collect(Collectors.toList()),
e.getValue().get(0).getComments()))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
这会将分组结果映射到您的CustomDataBean对象。
对于输入:
List<DataBean> origData = Arrays.asList(
new DataBean(1, "a", "c"),
new DataBean(1, "b", "c"),
new DataBean(1, "c", "c"),
new DataBean(2, "a", "d"),
new DataBean(2, "c", "d")
);
Run Code Online (Sandbox Code Playgroud)
结果将是这样的:
CustomDataBean[employeeId=1, orgs=[a, b, c], comments='c']
CustomDataBean[employeeId=2, orgs=[a, c], comments='d']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
229 次 |
| 最近记录: |