如何将Java HashSet 转换为原始int数组?
我有一个带有一堆Integers
的HashSet
。 我想把它变成一个数组,但是要调用
hashset.toArray();
返回一个Object[]
。 除了手动迭代每个元素之外,还有更好的方法将它转换为int
数组吗? 我想将数组传递给
void doSomething(int[] arr)
它不会接受Object []数组,即使我尝试像它一样
doSomething((int[]) hashSet.toArray());
Apache的ArrayUtils有这个(它仍然在幕后迭代):
doSomething(ArrayUtils.toPrimitive(hashset.toArray()));
他们总是一个检查这样的事情的好地方。
您可以使用Java 8流从任何Collection
(包括HashSet
)创建int[]
:
int[] array = coll.stream().mapToInt(Number::intValue).toArray();
当然,库仍在代表您迭代集合(或其他流源)。
除了简洁且没有外部库依赖性之外,如果你有一个非常大的集合要复制,流也可以让你并行。
public int[] toInt(Set set) { int[] a = new int[set.size()]; int i = 0; for (Integer val : set) a[i++] = val; return a; }
既然我为你编写了代码,那就不再是那本手册,不是吗? ;)
你可以使用番石榴:
Ints.toArray(Collection extends Number> collection)
即使没有Apache Utils,您也可以将Set
转换为Integer[]
:
Set myset = new HashSet (); Integer[] array = myset.toArray(new Integer[0]);
但是,如果你需要int[]
你必须遍历集合。
不; 你必须迭代它们。 抱歉。
您还可以使用toArray()方法的toArray(T [] contents)变体。 创建一个与HashSet大小相同的空数组,然后将其传递给toArray()方法:
Integer[] myarray = new Integer[hashset.size()]; doSomething(hashset.toArray(myarray));
您必须更改doSomething()
函数以接受Integer[]
数组而不是int[]
。 如果这不可行,则必须将toArray
返回的值数组转换为int[]
。