Как отсортировать многомерный массив объектов на основе определенного элемента в Java - PullRequest
0 голосов
/ 30 марта 2019

Я строю многомерный массив объектов, и я бы хотел отсортировать его по определенному элементу внутри подмассива.

Я пробовал Collections.sort и bubbleSort, но они не работали.

Object[][] fields = {{
      "sam", "mccarty",
      "m", "1988/06/01", 5.0, true
   },
   {
      "tom", "huges",
      "m", "1988/06/01", 7.0, true
   },
   {
      "jim", "ross",
      "m", "1988/06/01", 6.5, true
   }
};

Я ожидаю, что массив отсортирован по подэлементу [4], поэтому:

 {
   {
      "tom", "huges",
      "m", "1988/06/01", 7.0, true
   },
   {
      "jim", "ross",
      "m", "1988/06/01", 6.0, true
   },
   {
      "sam", "mccartney",
      "m", "1988/06/01", 5.5, true
   }
}

Ответы [ 2 ]

0 голосов
/ 30 марта 2019

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

Arrays.sort(fields, (o1, o2) -> Double.compare((Double) o1[4], (Double) o2[4]));

Выводы двойных значений после сортировки:

5.0
6.5
7.0

Лучшее решение

но я бы создал объект, поставилОбязательное поле, например:

class MyObject{
    private String fname;
    private String lname;
    private String gender;
    private LocalDate birthDay;
    private Double note;
    private boolean check;
   // @Getter @Setter @Constructors
}

, тогда сортировка может быть простой:

MyObject[] array = {...};
Arrays.sort(array, Comparator.comparing(MyObject::getNote));
0 голосов
/ 30 марта 2019

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

Вы можете сделать что-то вроде этого:

Person[] fields = {
    new Person("sam", "mccarty", "m", "1988/06/01", 5.0, true),
    ...
};
// Assuming you want things to be sorted in descending order like in your example.
Collections.sort((o1, o2) -> o2.getFourth() - o1.getFourth());

Более подробную информацию о компараторах вы можете найти в документации здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...