배열은 중복의 값이 들어갈 수 있다.
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 이상이 안될때 쓸 수 있을거 같다.
'언어 > JAVA' 카테고리의 다른 글
[자바/Java] Collection과 comparator (1) | 2024.02.04 |
---|---|
[자바/Java] 입력 비교 Scanner, BufferedReader (0) | 2024.01.19 |
[자바/Java] 정규표현식 (0) | 2022.02.13 |