このリスト内のオブジェクトの他の値によってグループ化された、このオブジェクトの値の 1 つを集約したいオブジェクトのリストがあります。
現在、グループ化したいプロパティをハッシュキーとして使用しており、オブジェクトをトラバースしています:
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