2016-09-18 2 views
1

스트림을 사용하여 병합 한 후 두 배열의 고유 한 값만 유지하려고합니다. 내가 찾고있어 distinct() 기능되지 않습니다 :Java 8 스트림을 사용하여 여러 배열에서 고유 한 값만 유지하십시오.

int[] a = { 1, 2, 3 }; 
int[] b = { 3, 4, 5 }; 
int[] c = IntStream.concat(Arrays.stream(a), Arrays.stream(b)).distinct().toArray(); 

나에게 c = {1, 2, 3, 4, 5}을 제공합니다,하지만 난 {1, 2, 4, 5}

스트림을 사용하여이를 달성 할 수있는 쉽고 빠른 방법이 있나요 될 c을해야합니까?

+1

배열에서 값이 두 번 이상 나타날 수 있습니까? 그렇지 않다면 솔루션은 다음과 같은 의사 코드와 같습니다 :'concat (a, b) .group(). filter (count == 1)' – Andreas

답변

4

이 작업을 수행 할 수 있습니다

int[] a = { 1, 2, 3 }; 
int[] b = { 3, 4, 5 }; 
int[] c = IntStream.concat(Arrays.stream(a), Arrays.stream(b)) 
    .boxed() 
    .collect(Collectors.collectingAndThen(
     Collectors.groupingBy(Function.identity(), Collectors.counting()), // Freq map 
     m -> m.entrySet().stream() 
      .filter(e -> e.getValue() == 1) // Filter duplicates 
      .mapToInt(e -> e.getKey()) 
      .toArray() 
    )); 

첫 번째는 모든 요소에 대한 주파수지도를 만든 다음 번 이상 발생 요소를 필터링합니다.

+0

감사합니다. 그것은 많은 도움이됩니다. 나는 여기서부터 나아갈 수 있다고 생각해. –

관련 문제