Java에서 어레이를 세트로 변환하는 방법
어레이를 Java의 Set으로 변환하고 싶습니다.(루프를 사용하는 등) 몇 가지 분명한 방법이 있지만, 다음과 같은 좀 더 깔끔한 방법이 필요합니다.
java.util.Arrays.asList(Object[] a);
좋은 생각 있어요?
다음과 같이 합니다.
Set<T> mySet = new HashSet<>(Arrays.asList(someArray));
Java 9+에서는 수정할 수 없는 설정이 OK인 경우:
Set<T> mySet = Set.of(someArray);
Java 10+에서는 범용 타입 파라미터는 어레이컴포넌트 타입에서 유추할 수 있습니다.
var mySet = Set.of(someArray);
조심하세요.
Set.of가 Ilgulate Argument를 슬로우합니다.예외 - someArray에 중복된 요소가 있는 경우.자세한 것은, https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Set.html#of(E 를 참조해 주세요.
Set<T> mySet = new HashSet<T>();
Collections.addAll(mySet, myArray);
Collections.addAll(java.util)입니다.컬렉션, T...)를 JDK 6에서 가져옵니다.
또한 어레이가 기본 요소로 가득 차면 어떻게 됩니까?
< 에는, 「한 JDK< 8 >, 「 8 」이라고 .for
의 passloop으로 합니다.
JDK > = 8의 경우 매력적인 옵션은 다음과 같습니다.
Arrays.stream(intArray).boxed().collect(Collectors.toSet());
Guava를 사용하면 다음 작업을 수행할 수 있습니다.
T[] array = ...
Set<T> set = Sets.newHashSet(array);
Java 8:
String[] strArray = {"eins", "zwei", "drei", "vier"};
Set<String> strSet = Arrays.stream(strArray).collect(Collectors.toSet());
System.out.println(strSet);
// [eins, vier, zwei, drei]
바라그도 먹힐 거야!
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
.
"반환된 세트의 유형, 가변성, 직렬화 가능성 또는 스레드 안전성에 대한 보장은 없습니다."
후일어나다은 다음과 같습니다. [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)
자세한 내용은 Unfound Set Static Factory Methods를 참조하십시오.
불변 세트(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));
}
이미 많은 훌륭한 답변이 있었지만, 대부분의 답변은 일련의 기본 요소에서는 작동하지 않습니다(예:int[]
,long[]
,char[]
,byte[]
의 개요)
Java 8 이상에서는 어레이에 다음과 같은 기능을 탑재할 수 있습니다.
Integer[] boxedArr = Arrays.stream(arr).boxed().toArray(Integer[]::new);
그런 다음 스트림을 사용하여 세트로 변환합니다.
Stream.of(boxedArr).collect(Collectors.toSet());
Set<Integer> set1 = Sets.mutable.of(1, 2, 3, 4, 5);
Set<Integer> set2 = Sets.mutable.of(new Integer[]{1, 2, 3, 4, 5});
MutableSet<Integer> mutableSet = Sets.mutable.of(1, 2, 3, 4, 5);
ImmutableSet<Integer> immutableSet = Sets.immutable.of(1, 2, 3, 4, 5);
Set<Integer> unmodifiableSet = Sets.mutable.of(1, 2, 3, 4, 5).asUnmodifiable();
Set<Integer> synchronizedSet = Sets.mutable.of(1, 2, 3, 4, 5).asSynchronized();
ImmutableSet<Integer> immutableSet = Sets.mutable.of(1, 2, 3, 4, 5).toImmutable();
주의: 저는 Eclipse Collections의 커밋입니다.
Quick : 다음 작업을 수행할 수 있습니다.
// Fixed-size list
List list = Arrays.asList(array);
// Growable list
list = new LinkedList(Arrays.asList(array));
// Duplicate elements are discarded
Set set = new HashSet(Arrays.asList(array));
거꾸로 하다
// Create an array containing the elements in a list
Object[] objectArray = list.toArray();
MyClass[] array = (MyClass[])list.toArray(new MyClass[list.size()]);
// Create an array containing the elements in a set
objectArray = set.toArray();
array = (MyClass[])set.toArray(new MyClass[set.size()]);
위의 조언에 따라 아래를 작성했습니다. - 훔치세요...좋다!
/**
* Handy conversion to set
*/
public class SetUtil {
/**
* Convert some items to a set
* @param items items
* @param <T> works on any type
* @return a hash set of the input items
*/
public static <T> Set<T> asSet(T ... items) {
return Stream.of(items).collect(Collectors.toSet());
}
}
표준 라이브러리를 사용하는 것이 많은 도움이 될 수 있습니다.Apache Commons 컬렉션을 살펴보십시오.이 경우 문제는 다음과 같이 변환됩니다.
String[] keys = {"blah", "blahblah"}
Set<String> myEmptySet = new HashSet<String>();
CollectionUtils.addAll(pythonKeywordSet, keys);
다음은 Collections Utils javadoc입니다.
사용하다CollectionUtils
또는ArrayUtils
부터stanford-postagger-3.0.jar
import static edu.stanford.nlp.util.ArrayUtils.asSet;
or
import static edu.stanford.nlp.util.CollectionUtils.asSet;
...
String [] array = {"1", "q"};
Set<String> trackIds = asSet(array);
Java 10의 경우:
String[] strs = {"A", "B"};
Set<String> set = Set.copyOf(Arrays.asList(strs));
Set.copyOf
변경할 수 없는 것을 반환Set
주어진 요소를 포함하는 모습Collection
.
기정사실Collection
있어서는 안 된다null
, 이 파일에는 다음 파일을 포함할 수 없습니다.null
요소들.
private Map<Integer, Set<Integer>> nobreaks = new HashMap();
nobreaks.put(1, new HashSet(Arrays.asList(new int[]{2, 4, 5})));
System.out.println("expected size is 3: " +nobreaks.get(1).size());
출력은
expected size is 3: 1
로 변경하다
nobreaks.put(1, new HashSet(Arrays.asList( 2, 4, 5 )));
출력은
expected size is 3: 3
Android를 지원하는 사용자:
Kotlin 컬렉션 솔루션
별표*
는spread
교환입니다.컬렉션의 모든 요소를 개별적으로 적용하며, 각 요소는 다음 순서로vararg
메서드 파라미터.이는 다음과 같습니다.
val myArray = arrayOf("data", "foo")
val mySet = setOf(*myArray)
// Equivalent to
val mySet = setOf("data", "foo")
// Multiple spreads ["data", "foo", "bar", "data", "foo"]
val mySet = setOf(*myArray, "bar", *myArray)
매개 변수 전달 안 함setOf()
빈 세트가 됩니다.
에 더하여setOf
특정 해시 유형에 대해 다음 중 하나를 사용할 수도 있습니다.
hashSetOf()
linkedSetOf()
mutableSetOf()
sortableSetOf()
수집 항목 유형을 명시적으로 정의하는 방법입니다.
setOf<String>()
hashSetOf<MyClass>()
하나의 요소만 포함된 불변의 세트를 작성해야 하는 경우Collections.singleton(...)
다음은 예를 제시하겠습니다.
Set<String> mySet = Collections.singleton("Have a good day :-)");
이것은 원래의 질문에 대한 답은 아니지만 누군가에게는 도움이 될 수 있습니다(적어도 나에게는 그랬을 것입니다).이 답변이 맞지 않는다고 생각되면 말씀해 주시면 삭제해 드리겠습니다.
new HashSet<Object>(Arrays.asList(Object[] a));
하지만 이게 더 효율적일 것 같아요.
final Set s = new HashSet<Object>();
for (Object o : a) { s.add(o); }
Set<T> b = new HashSet<>(Arrays.asList(requiredArray));
언급URL : https://stackoverflow.com/questions/3064423/how-to-convert-an-array-to-a-set-in-java
'sourcecode' 카테고리의 다른 글
Java의 +=, -=, *=, /= 복합 할당 연산자가 캐스팅을 요구하지 않는 이유는 무엇입니까? (0) | 2022.07.31 |
---|---|
vue 외부 기능, vue에 데이터 전달 (0) | 2022.07.31 |
변수가 어레이인 경우 vuex에서 상태를 변경하는 방법 (0) | 2022.07.30 |
새로운 요소를 추가하기 위해 Enum을 하위 분류할 수 있습니까? (0) | 2022.07.30 |
Axios GET이 Safari 브라우저에서 작동하지 않음 (0) | 2022.07.30 |