2014-06-18 3 views
0

CollectionUtils.collate 메서드를 사용하여 두 컬렉션의 합집합을 찾으려고합니다.중복 제거 CollectionUtils.collate 메서드

[my, sentence, test, for, test, is, testing, this] 

당신이 할 수 :

Collection<String> tokensUnion2 = CollectionUtils.collate(
    Arrays.asList(new String[]{"my", "sentence", "test", "for", "testing"}), 
    Arrays.asList(new String[]{"my", "sentence", "test", "is", "this"}), 
    false); 

결과 모음 아래의 하나입니다 :이 방법은 패키지 여기 org.apache.commons.collections4

에서 제공하는 코드 부분입니다 #, CollectionUtils.collate의 세 번째 매개 변수가 중복을 원하지 않는다고 나타내지 만 결과 컬렉션에 중복 된 내용이 포함되어 있습니다.

더하기 문자열 문장이 제거되었지만 테스트이 여전히 존재합니다.

결과 집합을 HashSet에 넣기 만하면이 문제를 해결할 수 있지만 잘못했는지 알고 싶습니다.

감사합니다.

답변

1

collate 메서드는 두 개의 정렬 된 컬렉션을 필요로합니다. CollectionUtils # collate에 대한 Java 문서는 다음과 같이 말합니다. 두 개의 정렬 된 컬렉션 a 및 b를 단일 정렬 된 List로 병합하여 요소의 자연 순서가 유지되도록합니다.

예에서 인수로 제공된 두 개의 목록은 정렬되지 않습니다. 당신이

List<String> list1 = Arrays.asList(new String[] { "my", "sentence", "test", "for", "testing" }); 
List<String> list2 = Arrays.asList(new String[] { "my", "sentence", "test", "is", "this" }); 

Collections.sort(list1); 
Collections.sort(list2); 

Collection<String> tokensUnion2 = CollectionUtils.collate(list1, list2, false); 

같은 목록을 정렬하려면 코드를 수정하는 경우 이렇게하면 더 중복

[for, is, my, sentence, test, testing, this] 

나는이 도움이 되었으면 좋겠가 없습니다 정렬 된 컬렉션을 반환합니다.