我想在Java中将数组转换为Set。有一些明显的方法可以做到这一点(即使用循环),但我想做一些更整洁的事情,比如:
java.util.Arrays.asList(Object[] a);
有什么想法吗?
我想在Java中将数组转换为Set。有一些明显的方法可以做到这一点(即使用循环),但我想做一些更整洁的事情,比如:
java.util.Arrays.asList(Object[] a);
有什么想法吗?
当前回答
如果需要构建一个内部只有一个元素的不可变集合,可以使用Collections.singleton(…)
Set<String> mySet = Collections.singleton("Have a good day :-)");
这并不能回答最初的问题,但可能对某人有用(至少对我来说是这样)。如果你认为这个答案不合适,告诉我,我会删除它。
其他回答
在完成Arrays.asList(array)之后,可以执行Setset=newHashSet(list);
下面是一个示例方法,您可以编写:
public <T> Set<T> GetSetFromArray(T[] array) {
return new HashSet<T>(Arrays.asList(array));
}
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
如果需要构建一个内部只有一个元素的不可变集合,可以使用Collections.singleton(…)
Set<String> mySet = Collections.singleton("Have a good day :-)");
这并不能回答最初的问题,但可能对某人有用(至少对我来说是这样)。如果你认为这个答案不合适,告诉我,我会删除它。
Varargs也会起作用!
Stream.of(T... values).collect(Collectors.toSet());
已经有很多很好的答案了,但大多数答案都不适用于基元数组(如int[]、long[]、char[]、byte[]等)
在Java 8及更高版本中,您可以使用以下命令对阵列进行装箱:
Integer[] boxedArr = Arrays.stream(arr).boxed().toArray(Integer[]::new);
然后使用流转换为集合:
Stream.of(boxedArr).collect(Collectors.toSet());