Перевести параметры коробки из списка в массив Java
Имеется класс Boxes с параметрами коробки:
public class Boxes {
public int h;
public int w;
public int l;
public Boxes(int h, int w, int l) {
this.h = h;
this.w = w;
this.l = l;
}
Создаю в Main'е список:
List<Boxes> listBox = new ArrayList<>();
listBox.add(new Boxes(1,2,3));
Как перевести его в одномерный массив?
int arr[] = new int[listBox.size()];
Ответы (2 шт):
так
Boxes[] array = listBox.toArray(new Boxes[0]);
либо так
Boxes[] array1 = new Boxes[listBox.size()];
listBox.toArray(array1); // заполнить массив
Если нужно получить массив коробок, то следует воспользоваться стандартным методом List::toArray(T[] arr), как указано в предыдущем ответе:
Boxes[] arrBoxes = listBoxes.toArray(new Boxes[0]);
В данном случае задавать размер массива-приемника необязательно, так как в любом случае данные списка будут скопированы в новый массив:
If the list fits in the specified array, it is returned therein. Otherwise, a new array is allocated with the runtime type of the specified array and the size of this list.
If the list fits in the specified array with room to spare (i.e., the array has more elements than the list), the element in the array immediately following the end of the list is set to null.
Вольный перевод: если список помещается в заданный массив, то будет размещён в этом массиве. Иначе будет создан новый массив с типом заданного массива и размером списка.
Если в заданном массиве будет лишнее место (т.е., массив имеет больше элементов, чем список), то элемент в массиве с индексом size будет установлен в null.
Если же необходимо получить целочисленный массив параметров коробок, следует использовать Stream API и преобразовать список коробок:
int[] boxParams = listBox.stream()
.flatMapToInt(b -> IntStream.of(b.h, b.w, b.l)) // IntStream
.toArray(); // int[]
System.out.println(Arrays.toString(boxParams)); // -> [1, 2, 3]