Как преобразовать Arraylist в 2D двойной[][] массив

#java #arrays #arraylist #multidimensional-array

#java #массивы #arraylist #многомерный массив

Вопрос:

У меня есть, ArrayList который имеет объекты из Coord s, которые являются x и y:

 ArrayList<Coords> positionsArrayList = new ArrayList<>(values);
  

 class Coords {
    int x;
    int y;

    public boolean equals(Object o) {
        Coords c = (Coords) o;
        return c.x == x amp;amp; c.y == y;
    }

    public Coords(int x, int y) {
        super();
        this.x = x;
        this.y = y;
    }

    public int hashCode() {
        return new Integer(x   "0"   y);
    }
}
  

Теперь я хочу извлечь эти x и y в виде 2D массива double[][] .
Точно так же, как

double[][] vector={{0,0},{1,1},{2,2}}

Я пробовал этот код:

 for (Coords value : positionsArrayList) {
    positions = new double[][]{{value.x, value.y}};
}
  

Но он вводит только последнюю запись. Новичок в Java, пожалуйста, помогите

Ответ №1:

Инструкция:

 positions = new double[][]{{value.x, value.y}};
  

каждый раз переназначает ссылку. Наконец, positions будет «указывать на» (содержать) последний кортеж, вот почему вы видите его как результат.

Ответ №2:

Что вы можете сделать, так это использовать традиционный цикл for для достижения результата:

 positions = new double[positionsArrayList.size()][2];
for(int i =0; i < positionsArrayList.size(); i  ){
    positions[i][0] = positionsArrayList.get(i).getX();
    positions[i][1] = positionsArrayList.get(i).getY();
}
  

Ответ №3:

Вы могли бы присвоить каждой координате значение для каждого индекса, например:

 double[][] positions = new double[positionsArrayList.size()][2];

for (int i = 0; i < positionsArrayList.size(); i  ) {
    positions[i][0] = positionsArrayList.get(i).x;
    positions[i][1] = positionsArrayList.get(i).y;
}
  

Или, если вы знакомы с stream:

 double[][] positions= positionsArrayList.stream()
            .map(coords -> new double[]{coords.x, coords.y})
            .toArray(double[][]::new);