我有一个对象列表,我想聚合该对象的一个值,该对象的值由该列表中对象的其他值分组。
我目前正在使用要分组的属性作为哈希键,并且正在遍历该对象:
ArrayList<MyObject> raw = Some Data;
Map<String, MyObject> map = new HashMap<String, MyObject>();
for (MyObject ungrouped : raw) {
String key = ungrouped.getStringOne().getName() + ungrouped.getStringTwo() + ungrouped.getStringThree();
if (map.containsKey(key)){
MyObject holder = map.get(key);
holder.setNumericProp(holder.getNumericProp() + ungrouped.getNumericProp());
// map.put(key, holder); //Edited after comments
}
else{
map.put(key, ungrouped);
}
}
return map.values().toArray(new MyObject[map.values().size()]);
有没有更优雅的方法可以在不使用连接字符串作为键的情况下做到这一点?
如果这是 SQL(我在几个应用层之外),它将是:
SELECT SUM(numericvalue) FROM sometable GROUP BY stringone, stringtwo , stringthree