[자바/Java] 배열에서 중복 제거하기 / list에서 중복 제거하기
2022. 2. 11.

배열은 중복의 값이 들어갈 수 있다.

 

Java에서 중복 값이 안되는 것은 set, HashMap정도가 생각이 나는데

이미 배열로 주어진 값이 있을 때 중복을 제거하는 방법에 대해서 알아봤다.

 

1.stream, distinct()

이 방법은 Java8부터 가능하다.

 

String[] str = ["apple", "apple", "banana", "pear", "pear",  "pear"];
String[] newStr = Arrays.stream(str).distinct().toArray(String[]::new);

Arrays.stream(배열) : 배열을 스트림으로 바꿔준다.

스트림.distinct() : 해당 스트림에서 중복을 제거한다.

스트림.toArray(Type[]::new) : 스트림을 배열로 변환한다.

 

+(2023.03.03)최근 다른 문제를 푸는데 String이 아닌 int배열의 중복을 제거하는 과정에서 toArray()하고 안의 내용물을 적지 않았는데 정상적으로 작동했다. 검색해보니 int[]의 경우에는 type을 적지않고 하면 되는거 같다. 단 Integer는 적어줘야한다.

 

위의 과정을 거치면 중복이 제거된 새로운 배열을 얻을 수 있다.

 

여기서 잠깐 내가 헷갈렸던 것 하나를 추가해서 적자면 바로 리스트를 stream으로 변환하는 방법이다.

List<String> list = Arrays.asList("apple", "banana", "pear", "apple");
List<String> newList = list.stream().distinct().collect(Collectors.toList());

리스트명.stream() : 리스트를 스트림으로 변환한다.

distinct는 같으니 설명 생략

스트림.collect(Collectors.toList()) : 스트림을 리스트로 변환한다.

 

아니면 array로 바꾼후에 Arrays.asList(배열명)을 이용해서 리스트를 만들어주는 방법도 있다.

 

import하는거 까먹지 말기

import java.util.stream.Collectors;
import java.util.stream.Stream;

 

2.HashSet

String[] str = ["apple", "apple", "banana", "pear", "pear",  "pear"];
HashSet<String> hashSet = new HashSet<>(Arrays.asList(str));
String[] newStr = hashSet.toArray(new String[0]);

배열을 hashSet으로 바꿨다가 hashset을 다시 배열로 바꿔주는 방법이다.

import java.util.Arrays;
import java.util.HashSet;

 

후자의 방법은 Java 8 이상이 안될때 쓸 수 있을거 같다.

myoskin