首页 > 代码库 > List某字段相同时将其他字段数据相加

List某字段相同时将其他字段数据相加

eg:List<User>中,User有id和money两个字段,如果id相同,就把User合并,即将money相加。

(代码中前段内容是两个list的追加,list1后面追加list2,最后存放在list1中)

数据:1:10;2:20;1:40

输出:1:50;2:20

User.java

package list;

public class User {
    private String id;
    private int money;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public int getMoney() {
        return money;
    }
    public void setMoney(int money) {
        this.money = money;
    }

}

 

test.java

package list;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import list.User;
//list 某字段相同时合并其他字段数据
//List<User>中,User有id和money两个字段,如果id相同,就把User合并,即将money相加。
public class test {
    public static void main(String[] args) {
        demo();
    }
    public static void demo(){
    List<User> list1 = new ArrayList<User>();
    List<User> list2 = new ArrayList<User>();
    User user1=new User();
    user1.setId("1");
    user1.setMoney(10);
    list1.add(user1);
    
    User user2=new User();
    user2.setId("2");
    user2.setMoney(20);
    User user3=new User();
    user3.setId("1");
    user3.setMoney(40);
    list2.add(user2);
    list2.add(user3);
    
    list1.addAll(list2);//两个list合并,此时数据还没有相加,只是在后面追加另一个list
    System.out.println("处理前:");
    for (User u : list1) {
         System.out.println(u.getId());
         System.out.println(u.getMoney());

     }
     
    User tmpUser = null;
     Map<String, User> map = new HashMap<String, User>();//合并后的User存在map中
     for(User oUser:list1) {
          tmpUser = map.get(oUser.getId());
          if (tmpUser != null) {
                  tmpUser.setMoney(tmpUser.getMoney() + oUser.getMoney());  //money合并
          } else {
               map.put(oUser.getId(), oUser);
         }
     }
     
     List<User> list = new ArrayList<User>();
     System.out.println("处理后:");
     for (String in : map.keySet()) {//遍历map
        //map.keySet()返回的是所有key的值
        User u = map.get(in);//得到每个key多对用value的值
        list.add(u);
        System.out.println(u.getId()+":"+u.getMoney());
        }
     for (User u : list) {//新list输出
         System.out.println(u.getId());
         System.out.println(u.getMoney());

     }
     
    }//demo()函数结束

}

 

List某字段相同时将其他字段数据相加