Как собрать 2D-массив в java 8 из списка объектов

#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])?