期望效果
将下面的数据,根据project_number分组,合并生成一个新的数据结构
[
{
"bop_id": "1877304831014735872",
"bop_name": "产品名称-wsas-1-衍生数据",
"bop_number": "cil0000001177",
"bop_rdmextensiontype": "projectproductbop",
"bop_rdmextensiontypecn": "产品名称",
"project_id": "1872524834802634752",
"project_name": "wsas-8005",
"project_number": "p000000244",
"project_rdmextensiontype": "project",
"project_rdmextensiontypecn": null
},
{
"bop_id": "1878637661451849728",
"bop_name": "产品名称-wsas-1",
"bop_number": "cil0000001180",
"bop_rdmextensiontype": "projectproductbop",
"bop_rdmextensiontypecn": "产品名称",
"project_id": "1872524834802634752",
"project_name": "wsas-8005",
"project_number": "p000000244",
"project_rdmextensiontype": "project",
"project_rdmextensiontypecn": null
}
]
期望新的数据结构如下:
[
{
"project_id": "1872524834802634752",
"project_name": "wsas-8005",
"project_number": "p000000244",
"project_rdmextensiontype": "project",
"project_rdmextensiontypecn": null,
"bop": [
{
"bop_id": "1877304831014735872",
"bop_name": "产品名称-wsas-1-衍生数据",
"bop_number": "cil0000001177",
"bop_rdmextensiontype": "projectproductbop",
"bop_rdmextensiontypecn": "产品名称"
},
{
"bop_id": "1878637661451849728",
"bop_name": "产品名称-wsas-1",
"bop_number": "cil0000001180",
"bop_rdmextensiontype": "projectproductbop",
"bop_rdmextensiontypecn": "产品名称"
}
]
}
]
实现思路
将 list<bopdatacheckvo> 按照 project_number 分组,并生成一个新的 list<usedatacheckvo>。具体步骤如下:
- 检查输入列表是否为空:如果 bopdatacheckvolist 为空,直接返回空列表。
- 按项目编号分组:使用流式处理将bopdatacheckvo 列表按 project_number 分组。
- 创建新的 usedatacheckvo对象:对于每个分组,取第一个 bopdatacheckvo 的信息填充到新的 usedatacheckvo 对象中,并将整个分组的bopdatacheckvo 列表赋值给 usedatacheckvo 的 bopdatacheckvos 属性。
- 收集结果:将所有生成的 usedatacheckvo 对象收集到一个列表并返回。
源码
list<bopdatacheckvo> :
@getter
@setter
public class bopdatacheckvo {
public string bop_id;
public string bop_name;
public string bop_number;
public string bop_rdmextensiontype;
public string bop_rdmextensiontypecn;
public string bop_versioniteration;
public string project_id;
public string project_name;
public string project_number;
public string project_rdmextensiontype;
public string project_rdmextensiontypecn;
public string iteration;
public string version;
/**
* 计算属性:得到完整的版本号:a.1
* @return
*/
public string getbop_versioniteration(){
if (null == this.getversion() || strconstant.string_null.equals(this.getversion()) || null == this.getiteration()) {
return null;
}
return this.getversion() + strconstant.symbol_dot + this.getiteration();
}
}
list<usedatacheckvo>:
@getter
@setter
public class usedatacheckvo {
public string project_id;
public string project_name;
public string project_number;
public string project_rdmextensiontype;
public string project_rdmextensiontypecn;
public list<bopdatacheckvo> bopdatacheckvos;
}
核心处理方法:
/**
* 将 list<bopdatacheckvo> 以 project_number 分组合并,生成一个新的 list<usedatacheckvo>
* @param bopdatacheckvolist 输入的 bopdatacheckvo 列表
* @return 处理后的 usedatacheckvo 列表
*/
public list<usedatacheckvo> mergebopdatacheckvobyprojectnumber(list<bopdatacheckvo> bopdatacheckvolist) {
if (org.apache.commons.collections4.collectionutils.isempty(bopdatacheckvolist)) {
return collections.emptylist();
}
return bopdatacheckvolist.stream()
.collect(collectors.groupingby(bopdatacheckvo::getproject_number))
.entryset().stream()
.map(entry -> {
bopdatacheckvo firstentry = entry.getvalue().get(0);
usedatacheckvo usedatacheckvo = new usedatacheckvo();
usedatacheckvo.setproject_id(firstentry.getproject_id());
usedatacheckvo.setproject_name(firstentry.getproject_name());
usedatacheckvo.setproject_number(firstentry.getproject_number());
usedatacheckvo.setproject_rdmextensiontype(firstentry.getproject_rdmextensiontype());
usedatacheckvo.setproject_rdmextensiontypecn(firstentry.getproject_rdmextensiontypecn());
usedatacheckvo.setbopdatacheckvos(entry.getvalue());
return usedatacheckvo;
})
.collect(collectors.tolist());
}
到此这篇关于java中stream流处理实现数据分组合并的文章就介绍到这了,更多相关java stream分组合并内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论