1. 개요
이 예제에서는 두 List 의 교차점 을 검색 하는 방법을 배웁니다 .
다른 많은 것들과 마찬가지로 Java 8 에 스트림 이 도입되어 훨씬 쉬워졌습니다 .
2. 두 문자열 List의 교차점
교차 가있는 String 의 List 두 개를 만들어 보겠습니다. 둘 다 중복 된 요소가 있습니다.
List<String> list = Arrays.asList("red", "blue", "blue", "green", "red");
List<String> otherList = Arrays.asList("red", "green", "green", "yellow");
이제 스트림 메서드를 사용하여 List의 교차점을 결정합니다 .
Set<String> result = list.stream()
.distinct()
.filter(otherList::contains)
.collect(Collectors.toSet());
Set<String> commonElements = new HashSet(Arrays.asList("red", "green"));
Assert.assertEquals(commonElements, result);
먼저, distinct를 사용 하여 중복 된 요소를 제거합니다 . 그런 다음 필터 를 사용 하여 otherList에 포함 된 요소를 선택합니다 .
마지막으로 Collector 로 출력을 변환합니다 . 교차점은 각 공통 요소를 한 번만 포함해야합니다. 순서는 중요하지 않으므로 toSet 은 가장 간단한 선택이지만 toList 또는 다른 수집기 메서드를 사용할 수도 있습니다 .
자세한 내용은 Java 8 수집기 사용방법(예제) 를 참조하십시오 .
3. 사용자 지정 클래스 List의 교차점
List 가 String이 아니라 우리가 만든 커스텀 클래스의 인스턴스를 포함 한다면 어떨까요? 글쎄, 우리가 Java의 규칙을 따르는 한 스트림 메소드가있는 솔루션은 사용자 정의 클래스에 대해 잘 작동합니다.
contains 메서드는 특정 개체가 List에 표시되는지 여부를 어떻게 결정합니까? equals 방법을 기반으로합니다 . 따라서 equals 메서드 를 재정의 하고 관련 속성의 값을 기반으로 두 개체를 비교해야합니다.
예를 들어 두 직사각형은 너비와 높이가 같으면 동일합니다.
equals 메서드를 재정의하지 않으면 클래스는 부모 클래스 의 equals 구현을 사용합니다 . 하루가 끝나면 또는 오히려 상속 체인에서 Object 클래스의 equals 메소드가 실행됩니다. 그러면 두 인스턴스는 힙에서 정확히 동일한 객체를 참조하는 경우에만 동일합니다.
equals 메소드 에 대한 자세한 정보는 Java equals () 및 hashCode () 계약 에 대한 기사를 참조하십시오 .
4. 결론
이 빠른 기사에서는 스트림을 사용하여 두 List의 교차점을 계산하는 방법을 살펴 보았습니다. 꽤 지루한 작업이 많이 있지만 Java Stream API에 대한 방법을 알고 있다면 매우 간단합니다. 여기에서 Java 스트림 에 대한 추가 사용방법(예제)를 살펴보십시오 .
- https://docs.spring.io/spring-framework/docs/current/reference/html
- https://www.baeldung.com/java-lists-intersection
'Java' 카테고리의 다른 글
자바의 오버플로와 언더 플로 (0) | 2021.03.31 |
---|---|
java.util.concurrent 개요 (0) | 2021.03.31 |
Spring Security로 무차별 대입 인증 시도 방지 (0) | 2021.03.30 |
스프링 부트 마이크로 서비스의 12 단계 방법론 (0) | 2021.03.30 |
SpringData JPA 사양을 사용한 REST 쿼리 언어 (0) | 2021.03.30 |