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); 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());//获取某key对应value 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()函数结束 }