list中查询的数据重复,如何去重并且数据相加?

例如:

name                num1           num2        num3            num4
张三                 1                1              2               0     
张三                 2               0               0               0


去重切value相加后
张三                  3               1             2                0
        //list为原始数据 
        //先根据名称分组为一个集合map key为用户名称,value为具有相同名称的用户集合
        Map<String, List<User>> userGroupMap = list.stream().collect(Collectors.groupingBy(User::getName));
        //users 去重并累加值的集合
        List<User> users = new ArrayList<>();
        userGroupMap.forEach((key, list) -> {
            User user = new User();
            user.setNum1(0);
            user.setNum2(0);
            user.setNum3(0);
            user.setNum4(0);
            list.forEach(item -> {
                user.setNum1(user.getNum1() + item.getNum1());
                user.setNum2(user.getNum2() + item.getNum2());
                user.setNum3(user.getNum3() + item.getNum3());
                user.setNum4(user.getNum4() + item.getNum4());
            });
            users.add(user);
        });

粗心写错了,重新发一下啊


public static void main(String[] args) {

        List<User> userList=new ArrayList<>();
        User  u1=new User("张三",1,1,2,0);
        User  u2=new User("张三",2,0,0,0);
        User  u3=new User("李四",1,1,2,0);
        User  u4=new User("王五",1,3,2,1);
        User  u5=new User("李四",1,1,0,1);
        userList.add(u1);
        userList.add(u2);
        userList.add(u3);
        userList.add(u4);
        userList.add(u5);
        System.out.println("去重前长度:"+userList.size());
        combineSameName(userList);
        System.out.println("去重后长度:"+userList.size());
        //去重后输出
        for(User user:userList) {
           System.out.println(user);
        }
    }
    
    public static void combineSameName(List<User> list){
        for(int i=0;i<list.size()-1;i++) {
            for(int j=i+1;j<list.size();j++) {
                if(list.get(j).getName().equals(list.get(i).getName())) {
                   int num1=list.get(i).getNum1()+list.get(j).getNum1();
                   int num2=list.get(i).getNum2()+list.get(j).getNum2();
                   int num3=list.get(i).getNum3()+list.get(j).getNum3();
                   int num4=list.get(i).getNum4()+list.get(j).getNum4();
                   list.get(i).setNum1(num1);
                   list.get(i).setNum2(num2);
                   list.get(i).setNum3(num3);
                   list.get(i).setNum4(num4);
                   list.remove(list.get(j));
                }
            }
        }
    }
    

    public static class User{
        
          private String name;
         
          private int num1;
          
          private int num2;
          
          private int num3;
          
          private int num4;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        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 int getNum3() {
            return num3;
        }

        public void setNum3(int num3) {
            this.num3 = num3;
        }

        public int getNum4() {
            return num4;
        }

        public void setNum4(int num4) {
            this.num4 = num4;
        }

        public User() {
            
        }
                
        public User(String name, int num1, int num2, int num3, int num4) {
            super();
            this.name = name;
            this.num1 = num1;
            this.num2 = num2;
            this.num3 = num3;
            this.num4 = num4;
        }

        @Override
        public String toString() {
            return "User [name=" + name + ", num1=" + num1 + ", num2=" + num2 + ", num3=" + num3 + ", num4=" + num4
                    + "]";
        }
          
          
        
    }

运行结果
去重前长度:5
去重后长度:3
User [name=张三, num1=3, num2=1, num3=2, num4=0]
User [name=李四, num1=2, num2=2, num3=2, num4=1]
User [name=王五, num1=1, num2=3, num3=2, num4=1]

对list做遍历。将合并后的数据放新集合中。

采用stream流进行 分组:

Map<String,List<User>> userGroupMap = list.stream().collect(Collectors.groupingBy(User::getName));

简单易懂方法,分两次遍历:

  1. 第一次先遍历原集合进行分类,也就是把同样名字的人放一起,可以用个map包装一下,key = name,value = List
  2. 遍历新集合,也就是刚才的map,再相加即可

自己建个类测试一下,望采纳!

public static void main(String[] args) {

        List<User> userList=new ArrayList<>();
        User  u1=new User("张三",1,1,2,0);
        User  u2=new User("张三",2,0,0,0);
        User  u3=new User("李四",1,1,2,0);
        User  u4=new User("王五",1,3,2,1);
        User  u5=new User("李四",1,1,0,1);
        userList.add(u1);
        userList.add(u2);
        userList.add(u3);
        userList.add(u4);
        userList.add(u5);
        System.out.println("去重前长度:"+userList.size());
        combineSameName(userList);
        System.out.println("去重后长度:"+userList.size());
        //去重后输出
        for(User user:userList) {
           System.out.println(user);
        }
    }
    
    public static void combineSameName(List<User> list){
        for(int i=0;i<list.size()-1;i++) {
            for(int j=i+1;j<list.size();j++) {
                if(list.get(j).getName().equals(list.get(i).getName())) {
                   int num1=list.get(i).getNum1()+list.get(j).getNum1();
                   int num2=list.get(i).getNum1()+list.get(j).getNum2();
                   int num3=list.get(i).getNum1()+list.get(j).getNum3();
                   int num4=list.get(i).getNum1()+list.get(j).getNum4();
                   list.get(i).setNum1(num1);
                   list.get(i).setNum2(num2);
                   list.get(i).setNum3(num3);
                   list.get(i).setNum4(num4);
                   list.remove(list.get(j));
                }
            }
        }
    }
    

    public static class User{
        
          private String name;
         
          private int num1;
          
          private int num2;
          
          private int num3;
          
          private int num4;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        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 int getNum3() {
            return num3;
        }

        public void setNum3(int num3) {
            this.num3 = num3;
        }

        public int getNum4() {
            return num4;
        }

        public void setNum4(int num4) {
            this.num4 = num4;
        }

        public User() {
            
        }
                
        public User(String name, int num1, int num2, int num3, int num4) {
            super();
            this.name = name;
            this.num1 = num1;
            this.num2 = num2;
            this.num3 = num3;
            this.num4 = num4;
        }

        @Override
        public String toString() {
            return "User [name=" + name + ", num1=" + num1 + ", num2=" + num2 + ", num3=" + num3 + ", num4=" + num4
                    + "]";
        }
          
          
        
    }

===========运行结果==============
去重前长度:5
去后前长度:3
User [name=张三, num1=3, num2=1, num3=1, num4=1]
User [name=李四, num1=2, num2=2, num3=1, num4=2]
User [name=王五, num1=1, num2=3, num3=2, num4=1]


 public static List<User> text(List<User> list){
        HashMap<String,User> map=new HashMap<>();
        for (int i=0;i<list.size();i++){
            if (map.containsKey(list.get(i).getName())){
                User user=map.get(list.get(i).getName());
                user.setNum1(user.getNum1()+list.get(i).getNum1());
                user.setNum2(user.getNum2()+list.get(i).getNum2());
                user.setNum3(user.getNum3()+list.get(i).getNum3());
                user.setNum4(user.getNum4()+list.get(i).getNum4());
            }else {
                map.put(list.get(i).getName(),list.get(i));
            }
        }
        return new ArrayList(map.values());
    }

望采纳