답변:
Collections.disjoint(A, B)작동 하지 않습니까? 설명서에서 :
지정된
true두 컬렉션에 공통 요소가없는 경우를 반환 합니다.
따라서 false컬렉션에 공통 요소가 포함되어 있으면 메서드가 반환 됩니다.
anyMatch모든 요소를 스트리밍하고 모든 요소를 setA호출 setB.contains()합니다. 요소에 대해 "true"가 리턴되면 전체 표현식이 true로 평가됩니다. 이것이 도움이 되었기를 바랍니다.
세트에 containsAny를 구현하는 좋은 방법은 Guava Sets.intersection ()을 사용하는 것 입니다.
containsAny를 반환 boolean하므로 호출은 다음과 같습니다.
Sets.intersection(set1, set2).isEmpty()
세트가 분리되어 있으면 true를, 그렇지 않으면 false를 반환합니다. 원래 세트를 수정하지 않기 위해 복제를 할 필요가 없기 때문에이 시간의 복잡성은 retainAll보다 약간 낫습니다.
Apache Commons에는 메소드가 CollectionUtils.containsAny()있습니다.
retainAll()Set 인터페이스에서 사용하십시오 . 이 방법은 두 세트에서 공통 인 요소의 교차점을 제공합니다. 자세한 내용은 API 문서를 참조하십시오.
retainAll도움이되지 않을 것입니다. AbstractCollection반복 구현 .
O(1)최상의 경우에 실행 시간을 갖는 반면 retainAll라인의 선을 따라 무언가를 가질 것입니다 O(N)(1 세트의 크기에 따라 다름) 최고의 실행 시간.
그렇게하는 약간 거친 방법이 있습니다. A 집합이 호출보다 일부 B 요소를 포함하는 경우에만
A.removeAll(B)
A 세트를 수정합니다. 이 상황에서 removeAll은 true를 리턴합니다 ( removeAll docs에 명시된대로 ). 그러나 아마도 A 세트를 수정하고 싶지 않아서 다음과 같이 사본에 대한 행동을 생각할 수 있습니다.
new HashSet(A).removeAll(B)
집합이 고유하지 않은 경우 즉, 비어 있지 않은 교차가 있으면 반환 값이 true가됩니다.
Apache Commons Collection 도 참조하십시오