聚合数据时的结果不再相同



我一直在使用以下函数来聚合数据:

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();
}

我的对象结构:

public class MyObject {
 private String gender;
 private  String state;
 private int quantity;
 private int Salary;
 //getters & setters}

但是因为我必须将 MyObject 属性声明为私有,所以我将其更改为以下内容:

      private static 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.setGender(current.getGender());
               aggregated.setState(current.state);
               map.put(key, aggregated);
           }
           int quantity=0,salary=0;
            quantity=quantity+aggregated.getQuantity();
            salary= salary+aggregated.getSalary(); 
           aggregated.setQuantity(quantity);
           aggregated.setSalary(salary);
        }
        return map.values();
    }

所以它不再给我想要的结果。

在您的第一个片段中,您正在做一些事情来为aggregated添加current。在你的第二个你只是参考aggregated所以可能不对。

像这样:

        }
        aggregated.setQuantity(aggregated.getQuantity() + current.getQuantity());
        aggregated.setSalary(aggregated.getSalary() + current.getSalary());

应该更好。

最新更新