Java 8에서 두 스트림 간의 대칭 차이를 얻는 방법은 무엇입니까?

요한

동일한 유형의 두 개의 Java 8 스트림이있는 경우이 두 스트림의 대칭 차이를 새 스트림으로 효율적으로 가져 오는 방법은 무엇입니까?

Breandán Dalton

효율적인 방법을 찾을 수 없었습니다. 내가 관리 한 최고는

static <T> Stream<T> symmetricDifference(Stream<T> stream1, Stream<T> stream2) {
    Set<T> elements1 = stream1.collect(Collectors.toSet());
    Set<T> elements2 = stream2.collect(Collectors.toSet());
    Set<T> result = new HashSet<T>(elements1);
    result.addAll(elements2);
    elements1.retainAll(elements2);
    result.removeAll(elements1);
    return result.stream();
}

아마 당신이 이미 생각 해낸 해결책 일 것입니다.

대칭 적 차이를 찾기 위해 스트림 연산을 사용하려고 할 때에도 스트림을 여러 번 반복해야하는 문제를 극복하기 위해 많은 임시 스트림과 세트를 생성해야한다는 것을 알게되었습니다. 다음은 Stream스트림 작업 만 사용하여 대칭 차이를 포함하는 을 생성하는 버전입니다 . 훨씬 더 비효율적이라는 것을 알 수 있습니다.

static <T> Stream<T> disjointStream(Stream<T> stream1, Stream<T> stream2) {
    Set<T> elements1 = stream1.collect(Collectors.toSet());
    Set<T> elements2 = stream2.collect(Collectors.toSet());
    Set<T> elementsIn1Notin2 = elements1.stream().filter(t -> !elements2.stream().anyMatch(Predicate.isEqual(t))).collect(Collectors.toSet());
    Set<T> elementsIn2Notin1 = elements2.stream().filter(t -> !elements1.stream().anyMatch(Predicate.isEqual(t))).collect(Collectors.toSet());
    return Stream.concat(elementsIn1Notin2.stream(), elementsIn2Notin1.stream());
}

스트림 작업 만 유지하면서 개선 할 수있는 방법을보고 싶기 때문에이 문제를 제기하고 있습니다 (아니오 Set또는 Collection작업과 별도로 작업 Collection.stream()). 그리고 내 투박한 구문이 어떻게 향상 될 수 있는지.

제쳐두고, Java 8에 막 들어가서 이러한 클래스가 어디에 있는지 궁금해하는 사람들을 위해 내 가져 오기는 다음과 같습니다.

import java.util.HashSet;
import java.util.Set;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Java 8과 두 스트림의 교차점을 찾는 방법은 무엇입니까?

분류에서Dev

(파이썬에서) 두 문자열 사이의 대칭 차이를 얻는 가장 효과적인 방법은 무엇입니까?

분류에서Dev

Excel 시트에서 한 열의 두 행 사이의 시간 차이를 찾는 방법은 무엇입니까?

분류에서Dev

Linux에서 두 날짜의 차이를 얻는 방법은 무엇입니까?

분류에서Dev

다트에서 두 목록의 차이를 얻는 방법은 무엇입니까?

분류에서Dev

moment.js에서 두 시간 사이의 차이를 얻는 방법은 무엇입니까?

분류에서Dev

두 타임 스탬프의 차이를 얻는 방법은 무엇입니까?

분류에서Dev

Java의 시간대 오프셋에서 시간대를 얻는 방법은 무엇입니까?

분류에서Dev

Java에서 두 개의 n 차원 배열의 합계를 얻는 방법은 무엇입니까?

분류에서Dev

C ++에서 (정렬되지 않은) 세트 차이 또는 대칭 차이를 얻는 방법은 무엇입니까?

분류에서Dev

Tableau에서 막대 차트의 두 막대를 결합하는 방법은 무엇입니까?

분류에서Dev

Java에서 업데이트 시간을 얻는 방법은 무엇입니까?

분류에서Dev

R에서 두 단어 사이의 텍스트를 얻는 방법은 무엇입니까?

분류에서Dev

Google 시트의 HH : MM 형식에서 시간 (십진수) 차이를 얻는 방법은 무엇입니까?

분류에서Dev

두 텍스트 입력 간의 날짜 차이를 계산하는 방법은 무엇입니까?

분류에서Dev

RethinkDB에서 두 스트림의 차이를 얻는 효율적인 방법

분류에서Dev

Postgresql : 십진수 시간에서 두 날짜와 시간의 차이를 찾는 방법은 무엇입니까?

분류에서Dev

전체 편집 텍스트의 중간 대신 편집 텍스트의 시작 부분에 커서를 두는 방법은 무엇입니까?

분류에서Dev

다른 데이터 프레임에서 인덱스를 가져와 두 데이터 프레임의 열 차이를 얻는 방법은 무엇입니까?

분류에서Dev

node.js에서 하나의 스트림을 두 개의 스트림으로 파이프하는 최적의 방법은 무엇입니까?

분류에서Dev

Altair 차트에서 두 개의 슬라이더를 결합하는 방법은 무엇입니까?

분류에서Dev

mongodb에서 두 하위 쿼리의 차이를 얻는 방법은 무엇입니까?

분류에서Dev

Java 8 스트림에서 내부 세트를 필터링하는 방법은 무엇입니까?

분류에서Dev

Altair에서 두 개의 막대 차트를 시리즈 사이에 공백으로 연결하는 방법은 무엇입니까?

분류에서Dev

iOS에서 다른 날짜의 두 시간 차이를 계산하는 방법은 무엇입니까?

분류에서Dev

Java에서 주어진 시간대 이름에서 현재 시간을 얻는 방법은 무엇입니까?

분류에서Dev

Android에서 두 시간 사이의 시간 목록을 얻는 방법은 무엇입니까?

분류에서Dev

Java에서 두 문자 사이의 문자열을 얻는 방법은 무엇입니까?

분류에서Dev

Java 8의 String 배열에서 BigDecimal 스트림을 만드는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    Java 8과 두 스트림의 교차점을 찾는 방법은 무엇입니까?

  2. 2

    (파이썬에서) 두 문자열 사이의 대칭 차이를 얻는 가장 효과적인 방법은 무엇입니까?

  3. 3

    Excel 시트에서 한 열의 두 행 사이의 시간 차이를 찾는 방법은 무엇입니까?

  4. 4

    Linux에서 두 날짜의 차이를 얻는 방법은 무엇입니까?

  5. 5

    다트에서 두 목록의 차이를 얻는 방법은 무엇입니까?

  6. 6

    moment.js에서 두 시간 사이의 차이를 얻는 방법은 무엇입니까?

  7. 7

    두 타임 스탬프의 차이를 얻는 방법은 무엇입니까?

  8. 8

    Java의 시간대 오프셋에서 시간대를 얻는 방법은 무엇입니까?

  9. 9

    Java에서 두 개의 n 차원 배열의 합계를 얻는 방법은 무엇입니까?

  10. 10

    C ++에서 (정렬되지 않은) 세트 차이 또는 대칭 차이를 얻는 방법은 무엇입니까?

  11. 11

    Tableau에서 막대 차트의 두 막대를 결합하는 방법은 무엇입니까?

  12. 12

    Java에서 업데이트 시간을 얻는 방법은 무엇입니까?

  13. 13

    R에서 두 단어 사이의 텍스트를 얻는 방법은 무엇입니까?

  14. 14

    Google 시트의 HH : MM 형식에서 시간 (십진수) 차이를 얻는 방법은 무엇입니까?

  15. 15

    두 텍스트 입력 간의 날짜 차이를 계산하는 방법은 무엇입니까?

  16. 16

    RethinkDB에서 두 스트림의 차이를 얻는 효율적인 방법

  17. 17

    Postgresql : 십진수 시간에서 두 날짜와 시간의 차이를 찾는 방법은 무엇입니까?

  18. 18

    전체 편집 텍스트의 중간 대신 편집 텍스트의 시작 부분에 커서를 두는 방법은 무엇입니까?

  19. 19

    다른 데이터 프레임에서 인덱스를 가져와 두 데이터 프레임의 열 차이를 얻는 방법은 무엇입니까?

  20. 20

    node.js에서 하나의 스트림을 두 개의 스트림으로 파이프하는 최적의 방법은 무엇입니까?

  21. 21

    Altair 차트에서 두 개의 슬라이더를 결합하는 방법은 무엇입니까?

  22. 22

    mongodb에서 두 하위 쿼리의 차이를 얻는 방법은 무엇입니까?

  23. 23

    Java 8 스트림에서 내부 세트를 필터링하는 방법은 무엇입니까?

  24. 24

    Altair에서 두 개의 막대 차트를 시리즈 사이에 공백으로 연결하는 방법은 무엇입니까?

  25. 25

    iOS에서 다른 날짜의 두 시간 차이를 계산하는 방법은 무엇입니까?

  26. 26

    Java에서 주어진 시간대 이름에서 현재 시간을 얻는 방법은 무엇입니까?

  27. 27

    Android에서 두 시간 사이의 시간 목록을 얻는 방법은 무엇입니까?

  28. 28

    Java에서 두 문자 사이의 문자열을 얻는 방법은 무엇입니까?

  29. 29

    Java 8의 String 배열에서 BigDecimal 스트림을 만드는 방법은 무엇입니까?

뜨겁다태그

보관