java - 根据某些字段对对象进行分组

标签 java arraylist

我有一个对象列表,具有以下特征:

Class myObject{
  String gender;
  String state;
  int quantity;
  int Salary;
}

List<myObject> myList=new ArrayList<Object>;

作为列表的输入,我有以下内容:

enter image description here

作为输出,我想只保留一次具有相同性别和相同状态的对象,同时求和相应的数量和工资,如下所示:

enter image description here

我的问题是如何循环遍历myList,找到具有相同性别和相同状态的对象,只保留它们出现一次,并将数量和相应的工资求和?

也就是说,对于第一行和第二行(相同性别,相同州),只保留一行,并将对应的数量和工资相加

最佳答案

private Collection<MyObject> aggregate(List<MyObject> objects) {
    Map<String, MyObject> map = new HashMap<String, MyObject>();
    for (MyObject current : objects) {
       String key = String.format("%s:%s", current.gender, current.state);
       MyObject aggregated = map.get(key);
       if (aggregated == null) {
           aggregated = new MyObject();
           aggregated.gender = current.gender;
           aggregated.state = current.state;
           map.put(key, aggregated);
       }
       aggregated.quantity += current.quantity;
       aggregated.salary += current.salary;
    }
    return map.values();
}

关于java - 根据某些字段对对象进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35769189/

相关文章:

Java反射调用不起作用

android - 如何在 Android 的 ArrayAdapter 上更新 ArrayList 中的项目

java - 尝试从 ArrayList 中的字符串中删除特定单词

android - 应用程序可能在 Andriod 中的主线程(Firebase 数据库)上做了太多工作

java - 图形用户界面程序不工作

java - Mockito 的几个参数条件

java 应用卡住 mac os 10.9

java - 返回两个数字的索引,以便它们加起来达到特定目标

c# - 在 C# 中按两个属性对 JSON 数据进行分组

java - 在for循环中向arraylist添加对象,但for循环完成后arraylist为空?