我想在Java中将数组转换为Set。有一些明显的方法可以做到这一点(即使用循环),但我想做一些更整洁的事情,比如:
java.util.Arrays.asList(Object[] a);
有什么想法吗?
我想在Java中将数组转换为Set。有一些明显的方法可以做到这一点(即使用循环),但我想做一些更整洁的事情,比如:
java.util.Arrays.asList(Object[] a);
有什么想法吗?
当前回答
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]
其他回答
使用Guava,您可以做到:
T[] array = ...
Set<T> set = Sets.newHashSet(array);
对于任何解决Android问题的人:
Kotlin集合解决方案
星号*是排列运算符。它单独应用集合中的所有元素,每个元素按顺序传递给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>()
Set<T> b = new HashSet<>(Arrays.asList(requiredArray));
使用stanford-stagger-3.0.jar中的CollectionUtils或ArrayUtils
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);
如果需要构建一个内部只有一个元素的不可变集合,可以使用Collections.singleton(…)
Set<String> mySet = Collections.singleton("Have a good day :-)");
这并不能回答最初的问题,但可能对某人有用(至少对我来说是这样)。如果你认为这个答案不合适,告诉我,我会删除它。