多个List合并根据相同属性数据相加
·
eg:List<User>中,User有id和money两个字段,如果id相同,就把User合并,即将money相加。
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("2");
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()函数结束
}
转载
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)