내가 하나 그룹 (A 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);
}
}
}
내가이 유일한 문제입니다 경우 I applyMerge()
함수를 호출하면 이전 합계 값의 맨 위에 모든 값이 추가됩니다. 나는 객체 MyClass head
이 단지 일시적인 것이라고 생각하지만, 참조는 tmp
이고 map
인 것으로 보인다.
내 오해는 무엇입니까?
ps : 데이터베이스에서 sqlResultList
을 갱신 할 수 있지만 데이터 자체가 변경되지 않았으므로이를 피하고 싶습니다.
downvoter가 아니지만 참조 유형 *이라고 불리는 이유가 있습니다. – shmosel
@shmosel이 경우 올바른 접근 방법은 무엇입니까? – wittich
무엇에 접근합니까? 당신은 당신이하려고하는 것을 간신히 설명했습니다. – shmosel