分组(聚集)对象的项目

时间:2016-03-02 17:44:22

标签: java list arraylist

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

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

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

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

enter image description here

并且作为输出,我想只保留具有相同性别和相同状态的对象的一次出现,同时总结数量和salsary correspanding,如下所示:

enter image description here

我的问题是我如何循环浏览myList,查找具有相同性别和相同状态的对象,只保留一次,并将数量与工资相加?

1 个答案:

答案 0 :(得分:1)

首先,我将您的类重命名为MyObject,因为Object是基础Java类。现在,对于其余部分 - 您可以使用由您已找到的性别和状态组合构成的伪索引,并总结列表其余部分的值,如下所示:

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

List<MyObject> myList=new ArrayList<MyObject>();
List<String> stateAndGender = new ArrayList<String>();
List<MyObject> finalList = new ArrayList<MyObject>();
// add objects here
for(MyObject mO : myList){
    String s = mO.getGender();
    s+="," + mO.getState();
    if(stateAndGender.indexOf(s)==-1)
    {
        MyObject fO = new MyObject();
        fO.setGender(mO.getGender());
        fO.setState(mO.getState());
        stateAndGender.add(s);
        int Qua = mO.getQuantity();
        int Sal = mO.getSalary();
        for(int i=0; i<myList.size(); i++)
        {
            if(String t = myList.get(i).getGender()+","+myList.get(i).getGender() == s)
            Qua += myList.get(i).getQuantity();
            Sal += myList.get(i).getSalary();
        }
        fO.setQuantity(Qua);
        fO.setSalary(Sal);
        finalList.add(fO);
    }
}
// Then return finalList

上面的代码假设您为已创建的类的字段设置了正确的getter,并且您的性别和状态不包含逗号,否则您需要调整代码。

更新:现在,您可以根据需要获得具有正确值的MyObject类型列表!但它不是原始的,而是名为finalList的那个。