我想在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);
new HashSet<Object>(Arrays.asList(Object[]a));
但我认为这会更有效率:
final Set s = new HashSet<Object>();
for (Object o : a) { s.add(o); }
在完成Arrays.asList(array)之后,可以执行Setset=newHashSet(list);
下面是一个示例方法,您可以编写:
public <T> Set<T> GetSetFromArray(T[] array) {
return new HashSet<T>(Arrays.asList(array));
}
这样地:
Set<T> mySet = new HashSet<>(Arrays.asList(someArray));
在Java 9+中,如果不可修改集合正常:
Set<T> mySet = Set.of(someArray);
在Java 10+中,可以从数组组件类型推断出泛型类型参数:
var mySet = Set.of(someArray);
小心
Set.of抛出IllegalArgumentException-如果有任何重复someArray中的元素。查看更多详细信息:https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Set.html#of(例如…)
有时使用一些标准库会有很大帮助。尝试查看Apache Commons集合。在这种情况下,您的问题简单地转化为以下内容
String[] keys = {"blah", "blahblah"}
Set<String> myEmptySet = new HashSet<String>();
CollectionUtils.addAll(pythonKeywordSet, keys);
这里是CollectionsUtils javadoc