合并多个List,合并List中的属性值

如果要对List中的对象进行唯一值属性去重,属性求和:
比如:对(“id1”, 1, 1),(“id2”,2,3),(“id1”,4,4),进行合并,合并后的结果是(“id1”, 5, 5),(“id2”,2,3)
public class DemeoDto{
    private int id;
    private int num1;
    private int num2;
    private String code1;
    private String code2;
    private String code3;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public int getNum1() {
        return num1;
    }
    public void setNum1(int num1) {
        this.num1 = num1;
    }
    public int getNum2() {
        return num2;
    }
    public void setNum2(int num2) {
        this.num2 = num2;
    }
    public String getCode1() {
        return code1;
    }
    public void setCode1(String code1) {
        this.code1 = code1;
    }
    public String getCode2() {
        return code2;
    }
    public void setCode2(String code2) {
        this.code2 = code2;
    }
    public String getCode3() {
        return code3;
    }
    public void setCode3(String code3) {
        this.code3 = code3;
    }
}
1.key唯一,key是实体类的一个字段,比如以Id为key,进行合并,代码如下
List<DemoDto> result = list.stream().collect(Collectors.toMap(DemoDto :: getId, a->a, (o1,o2)->{
o1.setNum1(o1.getNum1()+o2.getNum1());
o1.setNum2(o1.getNum2() + o2.getNum2());
o1.setCode1(o1.getCode1() + o2.getCode1());
return o1;
})).values().stream().collect(Collectors.toList());
2.key由多个字段组合而成,比如key = formDto.get1Code() + "_" + formDto.get2Code() + "_" + formDto.get3Code();
    /**
* 实现list对象的属性合并(key是组合的键,多个字段拼接)
* @param list
* @return
*/
public List<DemoDto> mergeList(List<DemoDto> list){
Map<String, DemoDto> map = new HashMap<>();
for(DemoDto formDto : list){
String key = formDto.get1Code() + "_" + formDto.get2Code() + "_" + formDto.get3Code();
if ( map.containsKey(key)){
DemoDto DemoDtoTemp = map.get(key);
DemoDtoTemp.setNum1(DemoDtoTemp.getNum1() + formDto.getNum1());
          DemoDtoTemp.setNum2(DemoDtoTemp.getNum2() + formDto.getNum2());
          DemoDtoTemp.setC(DemoDtoTemp.getC() + formDto.getC());
         }else {
          map.put(key,formDto);
            }
}
      //将map转成List
List<DemoDto> result = map.values().stream().collect(Collectors.toList());
return result;
}
posted @ 2022-03-27 21:49  初仰  阅读(951)  评论(0编辑  收藏  举报