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)
또한 두 가지 방법으로 불변 세트를 얻을 수 있습니다.
Set.copyOf(Arrays.asList(array))
Arrays.stream(array).collect(Collectors.toUnmodifiableList());
이 메소드는 Collectors.toUnmodifiableList()
내부적으로 Set.of
Java 9 에 도입 된 기능 을 사용 합니다. 자세한 내용은 이 답변 을 확인하십시오 .
답변
당신이 한 후에 당신 Arrays.asList(array)
은 실행할 수 있습니다Set set = new HashSet(list);
다음은 샘플 방법으로 작성 가능합니다.
public <T> Set<T> GetSetFromArray(T[] array) {
return new HashSet<T>(Arrays.asList(array));
}
