필자는 크기가 같지 않은 두 개의 컬렉션 또는 Arraylists를 비교해야합니다. 하나의 컬렉션은 REST 페이로드에서 새로 다운로드 된 객체 컬렉션입니다. 다른 하나는 개체 컬렉션의 로컬 리포지토리에있는 컬렉션입니다. 컬렉션 중 어느 것도 중복 객체를 갖지 않습니다.Java : 새 개체 또는 업데이트 된 개체의 두 컬렉션 비교
로컬 리포지토리에없는 새 개체 또는 다운로드 된 컬렉션에서 업데이트 된 개체를 로컬 리포지토리의 기존 개체에서 찾는 것이 좋습니다.
membershipObject:
id
start_date
end_date
uniqueId
id
및 uniqueId
가 이상적 컬렉션의 고유 : 따라서, 클래스는 결국 두 개의 새로운 개체의 컬렉션을 반환하는 방법과 업데이트 된 객체
서명 구성 그들을 비교하십시오. start_date
은 일반적으로 변경되지 않지만 end_date
은 null이거나 datetime 객체가 될 수 있습니다. end_date
이 null
인지 여부에 따라 개체가 "활성"또는 "비활성"인지를 찾는 지원 방법이 있습니다.
그리고 마지막 다운로드 이후에 end_date
이 변경되면 개체가 업데이트 된 것으로 간주됩니다.
예 : 위 예에서
downloadedCollection
0:
id: 1
start_date: 2017-05-01 00:00:00
end_date: null
uniqueId: <unique-string-abc>
1:
id: 2
start_date: 2017-04-01 00:00:00
end_date: 2017-05-02 00:00:00
uniqueId: <unique-string-cde>
2:
id: 3
start_date: 2017-05-01 10:00:00
end_date: null
uniqueId: <unique-string-def>
localCollection
0:
id: 1
start_date: 2017-05-01 00:00:00
end_date: null
uniqueId: <unique-string-abc>
1:
id: 2
start_date: 2017-04-01 00:00:00
end_date: null
uniqueId: <unique-string-cde>
는 id 2
업데이트 및 id 3
는 downloadedCollection
에서 새로운되었다.
작업의 복잡성을 고려하여이 두 컬렉션을 비교하는 가장 이상적인 Java 방법은 무엇입니까? Java SDK 7
일반적으로 변경된 내용을 확인하기 위해 데이터를 비교하지 마십시오. 대신 관리 시스템이 무엇을 볼 것인지 알 수 있도록하기 위해 무엇인가를 변경할 때 "더러운"플래그를 설정합니다. – azurefrog
설명 된대로 작업을 수행해야하는 경우 멤버 객체에 적절한 'hashCode()'메소드를 구현하고 해당하는 equals() 메소드를 구현할 수 있습니다. 그런 다음 새로 다운로드 한 목록의 요소를 포함하는'HashSet'을 만든 다음 참조 목록의 요소를'removeAll()'합니다. 어떤 요소가 남아 있는지는 구성원 목록의 equals() 메소드에 의해 정의 된 의미에서 참조 목록과 다른 것이거나 다른 것입니다. –
@azurefrog 이것은 REST 서비스에서 다운로드되기 때문에 서비스에서 클라이언트의 무엇이 더러운 지 알 수는 없습니다. 클라이언트가 실제로 무엇이 변경되었는지 (서비스의 최신 데이터를 단순히 사용하는 대신) 알아야한다고 가정하면 JohnBollinger의 솔루션은 상당히 좋습니다. –