私は1つでグループに(DBからの)オブジェクトのリストが欲しい正常に動作し、その要素は、以下のこの単純化されたコードであれば:オブジェクトのリストをIDでグループ化するのは、その関数の最初の呼び出しでのみ機能しますか?
List<MyClass> sqlResultList;
List<MyClass> resultList;
public void applyMerge() {
Map<Integer, List<MyClass>> map =
sqlResultList.stream().collect(Collectors.groupingBy(MyClass::getIdItem));
resultList = new ArrayList<>();
for (Integer IdItem : map.keySet()) {
List<MyClass> tmp = map.get(IdItem);
if (tmp.size() > 0) {
MyClass head = tmp.get(0); // seems to create just a reference
for (int i = 1; i < tmp.size(); i++) {
MyClass obj = tmp.get(i);
head.setMinutes(head.getMinutes() + obj.getMinutes());
}
resultList.add(head);
}
}
}
私はを持っている唯一の問題であり、その場合、私再呼び出しapplyMerge()
関数は、前の合計値の上にすべての値を追加します。オブジェクトMyClass head
はちょうど一時的なものだと思ったが、参照tmp
とmap
と思われる。
私の誤解は何ですか?
ps:私はDBからsqlResultList
を更新することができますが、データ自体は変更されていないので、これを避けたかったのです。
downvoterではなく、参照型*と呼ばれる理由があります。 – shmosel
@shmoselこの場合の正しいアプローチは何ですか? – wittich
何に近づきますか?あなたは何をしようとしているのかをほとんど説明していません。 – shmosel