Предыдущий ответ только что вернул исходный массив, когда я попробовал.Вот что сработало для меня:
String[][] myArray = {{"3","Toto","30"},{"2","Tata","29"},{"1","Titi","13"}};
Arrays.sort(myArray, new Comparator<String[]>() {
public int compare(String[] lhs, String[] rhs) {
try {
double lhs_value = Double.parseDouble(lhs[0]);
double rhs_value = Double.parseDouble(rhs[0]);
if (lhs_value < rhs_value) return -1;
if (lhs_value > rhs_value) return 1;
return 0; //else the two are equal
} catch (NumberFormatException e) {
//handle exception
return 0;
}
}
});
Мой вывод:
1 Titi 13
2 Tata 29
3 Toto 30
Здесь Arrays.sort
(см. Javadoc) принимает два параметра: массив you 're sorting (myArray) и Comparator
(см. Javadoc) , который представляет собой интерфейс, позволяющий сравнивать два произвольных типа.Поскольку {"3", "Toto", "30"}
- это не тип, который вы создали, а просто String[]
, мы собираемся встроить Comparator<String[]>
.
Компараторы реализуют функцию «сравнения», которая принимает два элемента.и возвращает -1, 0 или 1, чтобы определить порядок элементов.По сути, «сравнить» вызывается несколько раз в процессе сортировки, чтобы точно определить порядок сортировки.Вот некоторый псевдокод:
public int compare(Object a, Object b)
if (a comes "before" b) return -1
if (a is "equal" to b) return 0
if (a comes "after" b) return 1
Если это не ясно, вы можете узнать больше об интерфейсе Comparator здесь: https://www.geeksforgeeks.org/comparator-interface-java/
Я знаю, что использовал «до» и «после»ранее, которые немного нечеткие и не строгие.Если вы более склонны к математике, вот хорошее обсуждение интерфейса Comparator: https://math.stackexchange.com/questions/1400655/java-comparator-documentation-confused-about-the-terminology-total-order