Как я могу преобразовать Java HashSet<Integer> в примитивный массив int?

StackOverflow https://stackoverflow.com/questions/2451184

  •  20-09-2019
  •  | 
  •  

Вопрос

У меня есть HashSet<Integer> с кучей Integers в нем.Я хочу превратить его в массив, но вызываю

hashset.toArray();

возвращает Object[].Есть ли лучший способ преобразовать его в массив int кроме перебора каждого элемента вручную?Я хочу передать массив в

void doSomething(int[] arr)

который не примет массив Object[], даже если я попытаюсь привести его следующим образом

doSomething((int[]) hashSet.toArray());
Это было полезно?

Решение

Апачи Массивы имеет это (это все еще повторяется за кулисами):

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

Это всегда хорошее место, чтобы проверить наличие подобных вещей.

Другие советы

Вы можете создать int[] из любого Collection<Integer> (включая HashSet<Integer>) использование потоков Java 8:

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

Разумеется, библиотека все еще выполняет итерацию по коллекции (или другому источнику потока) от вашего имени.

Помимо краткости и отсутствия внешних библиотечных зависимостей, потоки также позволяют работать параллельно, если у вас действительно большая коллекция для копирования.

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

Теперь, когда я написал код для вас, это уже не то руководство, не так ли?;)

Вы можете преобразовать Set<Integer> Для Integer[] даже без утилит Apache:

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

Однако, если вам нужно int[] вы должны выполнить итерацию по набору.

Вы можете просто использовать Гуаву:

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

Нет;вы должны повторить их.Извините.

Попробуй это.Использование 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();

Вы также могли бы использовать вариант toArray(T[] contents) метода toArray().Создайте пустой массив целых чисел того же размера, что и HashSet, а затем передайте его методу toArray():

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

Вам пришлось бы изменить doSomething() функция для принятия Integer[] массив вместо int[].Если это невозможно, вам придется преобразовать массив значений, возвращаемых toArray Для int[].

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top