#java-8
#java-8
Вопрос:
Мне нужен способ сбора в 2D-массив из списка объектов. Каждый 1-D массив будет иметь размер 2, который будет взят из объекта Pair .
class Pair {
public int start;
public int end;
public Pair(int start, int end) {
this.start = start;
this.end = end;
}
public boolean contains(Pair pair) {
return this.end >= pair.start;
}
public int[][] convert(List<Pair> listOfPair) {
int[][] result = listOfPair.stream().map(x -> new int[] {x.start, x.end}).collect(**??**)
}
}
Мне нужен способ для моего метода преобразования выше.
Ответ №1:
Вы можете собрать массивы в список, а затем преобразовать его в массив:
return listOfPair.stream().map(x -> new int[]{x.start,
x.end}).collect(Collectors.toList()).toArray(new int[0][0]);
Это просто собирает массивы из 2 элементов в список, а затем преобразует список в массив.
toArray
Функция выделяет новый массив с типом своего параметра (в данном случае int[][]) и копирует в него данные из списка. new int[0][0]
Присваивается тип Array.newInstance()
, позволяющий ему создавать массив нужного типа.
Поскольку вы знаете размер массива в начале, вы могли бы сделать это, у которого есть только одно выделение памяти:
public static int[][] convert2(List<Pair> listOfPair) {
int[][] result = new int[listOfPair.size()][2];
int i = 0;
for (Pair p : listOfPair) {
result[i][0] = p.start;
result[i ][1] = p.end;
}
return resu<
}
Комментарии:
1. Что делает . Выполнить toArray(new int[0][0])?