jac*_*bot 29 java arrays int hashset
我HashSet<Integer>有一堆里面的Integers东西.我想把它变成一个数组,但是调用
hashset.toArray();
Run Code Online (Sandbox Code Playgroud)
返回一个Object[].int除了手动迭代每个元素之外,有没有更好的方法将其强制转换为数组?我想将数组传递给
void doSomething(int[] arr)
Run Code Online (Sandbox Code Playgroud)
它不会接受Object []数组,即使我尝试像它一样
doSomething((int[]) hashSet.toArray());
Run Code Online (Sandbox Code Playgroud)
Mat*_*hen 21
Apache的ArrayUtils有这个(它仍然在幕后迭代):
doSomething(ArrayUtils.toPrimitive(hashset.toArray()));
Run Code Online (Sandbox Code Playgroud)
他们总是一个检查这样的事情的好地方.
Jef*_*oom 20
您可以使用Java 8流int[]从任何Collection<Integer>(包括a HashSet<Integer>)创建:
int[] array = coll.stream().mapToInt(Number::intValue).toArray();
Run Code Online (Sandbox Code Playgroud)
当然,库仍在代表您迭代集合(或其他流源).
除了简洁且没有外部库依赖性之外,如果你有一个非常大的集合要复制,流也可以让你并行.
小智 9
尝试这个。使用java 8。
Set<Integer> set = new HashSet<>();
set.add(43);
set.add(423);
set.add(11);
set.add(44);
set.add(56);
set.add(422);
set.add(34);
int[] arr = set.stream().mapToInt(Integer::intValue).toArray();
Run Code Online (Sandbox Code Playgroud)
public int[] toInt(Set<Integer> set) {
int[] a = new int[set.size()];
int i = 0;
for (Integer val : set) a[i++] = val;
return a;
}
Run Code Online (Sandbox Code Playgroud)
现在我为你编写了代码,它不再是那本手册了,不是吗?;)
您可以将转换Set<Integer>为Integer[]没有Apache Utils的情况:
Set<Integer> myset = new HashSet<Integer>();
Integer[] array = myset.toArray(new Integer[0]);
Run Code Online (Sandbox Code Playgroud)
但是,如果需要,则必须int[]遍历该集合。