[java] Java에서 배열을 세트로 변환하는 방법

Java에서 배열을 Set으로 변환하고 싶습니다. 이 작업을 수행하는 몇 가지 확실한 방법이 있지만 (예 : 루프 사용) 조금 더 깔끔한 것을 원합니다.

java.util.Arrays.asList(Object[] a);

어떤 아이디어?



답변

이처럼 :

Set<T> mySet = new HashSet<>(Arrays.asList(someArray));

Java 9+에서 수정 불가능한 세트가 정상인 경우 :

Set<T> mySet = Set.of(someArray);

Java 10 이상에서 일반 유형 매개 변수는 배열 구성 요소 유형에서 유추 할 수 있습니다.

var mySet = Set.of(someArray);


답변

Set<T> mySet = new HashSet<T>();
Collections.addAll(mySet, myArray);

JDK 6 의 Collections.addAll (java.util.Collection, T …) 입니다.

또한 배열에 프리미티브로 가득 찬 경우 어떻게해야합니까?

JDK <8의 for경우 랩과 추가 기능을 한 번에 수행하는 명백한 루프를 작성합니다 .

JDK> = 8의 경우 매력적인 옵션은 다음과 같습니다.

Arrays.stream(intArray).boxed().collect(Collectors.toSet());


답변

함께 구아바 당신은 할 수 있습니다 :

T[] array = ...
Set<T> set = Sets.newHashSet(array);


답변

자바 8 :

String[] strArray = {"eins", "zwei", "drei", "vier"};

Set<String> strSet = Arrays.stream(strArray).collect(Collectors.toSet());
System.out.println(strSet);
// [eins, vier, zwei, drei]


답변

Varargs도 작동합니다!

Stream.of(T... values).collect(Collectors.toSet());


답변

자바 8

우리는 또한 사용하는 옵션이 Stream있습니다. 다양한 방법으로 스트림을 얻을 수 있습니다.

Set<String> set = Stream.of("A", "B", "C", "D").collect(Collectors.toCollection(HashSet::new));
System.out.println(set);

String[] stringArray = {"A", "B", "C", "D"};
Set<String> strSet1 = Arrays.stream(stringArray).collect(Collectors.toSet());
System.out.println(strSet1);

// if you need HashSet then use below option.
Set<String> strSet2 = Arrays.stream(stringArray).collect(Collectors.toCollection(HashSet::new));
System.out.println(strSet2);

소스 코드에 Collectors.toSet()따르면 요소가 하나씩 추가 HashSet되지만 사양에서이 요소가 HashSet.

“반환 된 Set의 유형, 변경 가능성, 직렬화 가능성 또는 스레드 안전성에 대한 보장은 없습니다.”

따라서 나중에 옵션을 사용하는 것이 좋습니다. 출력은 다음과 같습니다.

[A, B, C, D]
[A, B, C, D]
[A, B, C, D]

불변 세트 (Java 9)

Java 9 Set.of는 제공된 요소 또는 배열에 대해 불변 세트를 리턴하는 정적 팩토리 메소드를 도입했습니다 .

@SafeVarargs
static <E> Set<E> of​(E... elements)

확인 불변의 설정 정적 공장 방법을 자세한 내용은.

불변 세트 (Java 10)

또한 두 가지 방법으로 불변 세트를 얻을 수 있습니다.

  1. Set.copyOf(Arrays.asList(array))
  2. Arrays.stream(array).collect(Collectors.toUnmodifiableList());

이 메소드는 Collectors.toUnmodifiableList()내부적으로 Set.ofJava 9 에 도입 된 기능 을 사용 합니다. 자세한 내용은 이 답변 을 확인하십시오 .


답변

당신이 한 후에 당신 Arrays.asList(array)은 실행할 수 있습니다Set set = new HashSet(list);

다음은 샘플 방법으로 작성 가능합니다.

public <T> Set<T> GetSetFromArray(T[] array) {
    return new HashSet<T>(Arrays.asList(array));
}