将List集合中的多条数据,根据对象id进行合并

java语言:将集合List中的对象,根据对象的id进行数据合并(例如:业务员每天销售额归总)

1、创建People类:

public class People {
    private int id;//id编号
    private String name;//姓名
    private double inCome;//收入

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public double getInCome() {
        return inCome;
    }

    public void setInCome(double inCome) {
        this.inCome = inCome;
    }

    @Override
    public String toString() {
        return "People{" +"id=" + id +", name='"
                + name + '\'' +", inCome=" + inCome +'}';
    }
}

2、初始化数据,并将多条数据进行合并

  • 核心部分为静态 方法  getNewList(。。。)部分
public class TestListChange {
    public static void main(String args[]) {
        //为集合初始化多条数据,根据id 合并inCome字段使用
        People p1 = new People();
        p1.setId(1001);
        p1.setName("张三");
        p1.setInCome(5000.0);

        People p2 = new People();
        p2.setId(1002);
        p2.setName("李四");
        p2.setInCome(8000.0);

        People p3 = new People();
        p3.setId(1003);
        p3.setName("王二");
        p3.setInCome(5350.0);

        People p4 = new People();
        p4.setId(1003);
        p4.setName("王二");
        p4.setInCome(3000);

        People p5 = new People();
        p5.setId(1002);
        p5.setName("李四");
        p5.setInCome(4500);

        List<People> list = new ArrayList();
        list.add(p1);
        list.add(p2);
        list.add(p3);
        list.add(p4);
        list.add(p5);
        
        //遍历集合中数据
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i).toString());
        }

        System.out.println("================================================");

        List<People> changeList = getNewList(list);
        //合并后的数据条数
        System.out.println("合并后的数据条数:"+changeList.size());
        //遍历合并后的数据
        for (People people : changeList) {
            if(people!=null)
            System.out.println(people.toString());
        }
    }


    private static List<People> getNewList(List<People> list) {
        HashMap<Integer, People> tempMap = new HashMap<Integer, People>();
        for (People people : list) {
            int temp = people.getId();//获取编号
            //containsKey(Object key)该方法判断Map集合中是否包含指定的键名,如果包含返回true,不包含返回false
            //containsValue(Object value)该方法判断Map集合中是否包含指定的键值,如果包含返回true,不包含返回false
            if (tempMap.containsKey(temp)) {
                People p = new People();
                p.setId(temp);
                p.setName(people.getName());
                //合并相同id的inCome值
                p.setInCome(tempMap.get(temp).getInCome() + people.getInCome());

                //HashMap不允许key重复,当有key重复时,前面key对应的value值会被覆盖
                tempMap.put(temp, p);
            } else {
                tempMap.put(temp, people);
            }
        }

        //去除重复 编号id 的 list
        List<People> newList = new ArrayList<People>();
        for(Integer temp:tempMap.keySet()){
            newList.add(tempMap.get(temp));
        }
        return newList;

    }
}

运行后的效果图:

 

  • 8
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
要将两个不同的List集合对象数据合并,需要注意几点: 1. 对象必须具有相同的类型,否则无法合并。 2. 对象必须实现equals()和hashCode()方法,以便正确地去重和比较。 3. 如果两个对象相同,则只保留一个,以避免重复。 下面是一个示例代码,演示如何将两个不同的List集合对象数据合并: ```java import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; public class MergeListDemo { public static void main(String[] args) { List<Person> list1 = new ArrayList<>(); list1.add(new Person("Tom", 18)); list1.add(new Person("Lucy", 20)); List<Person> list2 = new ArrayList<>(); list2.add(new Person("Jim", 22)); list2.add(new Person("Lucy", 20)); Set<Person> set = new HashSet<>(); set.addAll(list1); set.addAll(list2); List<Person> list3 = new ArrayList<>(set); System.out.println(list3); } } class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public boolean equals(Object obj) { if (obj == null) return false; if (this == obj) return true; if (!(obj instanceof Person)) return false; Person other = (Person) obj; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; if (age != other.age) return false; return true; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((name == null) ? 0 : name.hashCode()); result = prime * result + age; return result; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; } } ``` 在上面的示例代码,我们创建了两个List集合list1和list2,并向每个集合添加了两个Person类型的对象。然后,我们创建了一个HashSet集合set,将list1和list2的所有元素添加到set。由于HashSet会自动去重,所以我们可以确保最终合并后的集合不会有重复的对象。最后,我们将set的元素转换为List集合并输出。输出结果为: ``` [Person [name=Lucy, age=20], Person [name=Jim, age=22], Person [name=Tom, age=18]] ``` 注意,输出结果只保留了一个name为Lucy、age为20的对象,这是因为我们在Person类实现了equals()和hashCode()方法,确保了对象的唯一性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值