1.处理同一个集合中相同的属性进行合并,并删除该对象
如下{
"title": "3",
"orderNum": 33,
"flag": true,
"lastOrderNum": 69,
"rate": "-47.0%"
}, {
"title": "1",
"orderNum": 88,
"flag": false
}, {
"title": "1",
"orderNum": 150,
"flag": false
}, {
"title": "4",
"orderNum": 101,
"flag": true,
"lastOrderNum": 135,
"rate": "-74.0%"
}
处理结果如下:
{
"title": "3",
"orderNum": 33,
"flag": true,
"lastOrderNum": 69,
"rate": "-47.0%"
}, {
"title": "1",
"orderNum": 238,
"flag": false
}, {
"title": "4",
"orderNum": 101,
"flag": true,
"lastOrderNum": 135,
"rate": "-74.0%"
}
代码
List<OrderVO> result = list.stream()
// 表示title为key, 接着如果有重复的,OrderVO,这里选择o1,
// 并把title重复,需要将orderNum与o1进行合并的o2, 赋值给o1,最后返回o1
.collect(Collectors.toMap(OrderVO::getTitle, a -> a, (o1, o2) -> {
o1.setOrderNum(o1.getOrderNum() + o2.getOrderNum());
//可以进行其他的赋值和计算
return o1;
})).values().stream().collect(Collectors.toList());
如果需要处理多个属性的
List<OrderVO> result = list.stream()
// 表示title为key, 接着如果有重复的,OrderVO,这里选择o1,
// 并把title重复,需要将orderNum与o1进行合并的o2, 赋值给o1,最后返回o1
.collect(Collectors.toMap(OrderVO::getTitle, a -> a, (o1, o2) -> {
o1.setOrderNum(o1.getOrderNum() + o2.getOrderNum());
//可以进行其他的赋值和计算
if (o2.getFlag() != null && o2.getFlag()) { //把已经计算之后的数据和属性赋值到o1
o1.setLastOrderNum((o1.getLastOrderNum() == null ? 0 : o1.getLastOrderNum()) + (o2.getLastOrderNum() == null ? 0 : o2.getLastOrderNum()));
o1.setFlag(true);
o1.setRate("-"+ getHandleRate(o1.getOrderNum(), o1.getLastOrderNum()) + "%");
}
return o1;
})).values().stream().collect(Collectors.toList());