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

Posted zhouerba

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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某字段相同时将其他字段数据相加的主要内容,如果未能解决你的问题,请参考以下文章

多个相同的对象存储在List集合,根据对象内的某一个属性去重并且实现其中一个字段相加

多个相同的对象存储在List集合,根据对象内的某一个属性去重并且实现其中一个字段相加

多个相同的对象存储在List集合,根据对象内的某一个属性去重并且实现其中一个字段相加

SQL同一个表的某字段值相加赋值给另一个字段

.net怎么去除list中某两个字段相同的数据

java遍历集合某字段,判断是不是存在相同的值。