• 合并多个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;
    }
  • 相关阅读:
    FFMPEG 中dts和pts区别
    time_base
    [总结]FFMPEG视音频编解码零基础学习方法
    autolayout收集,适配,自动布局 状态栏 applicationFrame
    滑出式导航面板
    WPF与WCF c#
    App Icons on iPad and iPhone UI 尺寸
    mac iPhone管理工具
    scrollview背景
    网络编程链接
  • 原文地址:https://www.cnblogs.com/cdlyy/p/16064746.html
Copyright © 2020-2023  润新知