如何将Java HashSet <integer>转换为原始int数组?</integer>

时间:2010-03-15 23:27:01

标签: java arrays int hashset

我有一个HashSet<Integer>,里面有一堆Integers。我想把它变成一个数组,但是调用

hashset.toArray();

返回Object[]。除了手动迭代每个元素之外,还有更好的方法将它转换为int数组吗?我想将数组传递给

void doSomething(int[] arr)

不接受Object []数组,即使我尝试像

那样进行转换
doSomething((int[]) hashSet.toArray());

8 个答案:

答案 0 :(得分:20)

Apache的ArrayUtils有这个(它仍然迭代behind the scenes):

doSomething(ArrayUtils.toPrimitive(hashset.toArray()));

他们总是一个检查这类事情的好地方。

答案 1 :(得分:17)

您可以使用Java 8流从任何int[](包括Collection<Integer>)创建HashSet<Integer>

int[] array = coll.stream().mapToInt(Number::intValue).toArray();

当然,库仍在代表您迭代集合(或其他流源)。

除了简洁且没有外部库依赖关系之外,如果你有一个非常大的集合要复制,流也可以让你并行。

答案 2 :(得分:5)

public int[] toInt(Set<Integer> set) {
  int[] a = new int[set.size()];
  int i = 0;
  for (Integer val : set) a[i++] = val;
  return a;
}

既然我已经为你编写了代码,那就不再是那本手册,不是吗? ;)

答案 3 :(得分:4)

即使没有Apache Utils,您也可以将Set<Integer>转换为Integer[]

Set<Integer> myset = new HashSet<Integer>();
Integer[] array = myset.toArray(new Integer[0]);

但是,如果您需要int[],则必须迭代该集。

答案 4 :(得分:4)

你可以使用番石榴:

Ints.toArray(Collection<? extends Number> collection)

答案 5 :(得分:2)

都能跟得上;你必须迭代它们。遗憾。

答案 6 :(得分:0)

尝试一下。 使用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();

答案 7 :(得分:-4)

您还可以使用toArray()方法的toArray(T [] contents)变体。创建一个与HashSet大小相同的空数组,然后将其传递给toArray()方法:

Integer[] myarray = new Integer[hashset.size()];
doSomething(hashset.toArray(myarray));

您必须将doSomething()功能更改为接受Integer[]数组而不是int[]。如果这不可行,您可以将toArray返回的值数组转换为int[]