合並多個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;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM