Klasa Java Comparator do sortowania tablic
Powiedzmy, że mamy następującą tablicę 2-wymiarową:
int camels[][] = new int[n][2];
Jak należy zadeklarować klasę Java Comparator
, Aby sortować tablice według ich pierwszych elementów w porządku malejącym za pomocą Arrays.sort(camels, comparator)
? Funkcja compare
dla odniesienia to:
@Override public int compare(int[] a, int [] b)
{
return b[0] - a[0];
}
26
2 answers
[...] Jak należy zadeklarować klasę Java Comparator, aby sortować tablice według ich pierwszych elementów w porządku malejącym [...]
Oto kompletny przykład użycia Java 8:
import java.util.*;
public class Test {
public static void main(String args[]) {
int[][] twoDim = { {1, 2}, {3, 7}, {8, 9}, {4, 2}, {5, 3} };
Arrays.sort(twoDim, Comparator.comparing((int[] arr) -> arr[0])
.reversed());
System.out.println(Arrays.deepToString(twoDim));
}
}
Wyjście:
[[8, 9], [5, 3], [4, 2], [3, 7], [1, 2]]
Dla Java 7 możesz zrobić:
Arrays.sort(twoDim, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return Integer.compare(o2[0], o1[0]);
}
});
Jeśli chcesz pracować na Java 6 lub starszej, wykonaj:
Arrays.sort(twoDim, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return ((Integer) o2[0]).compareTo(o1[0]);
}
});
51
Author: aioobe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-08 16:18:21
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-08 16:18:21
ODPOWIEDŹ od @ aioobe jest doskonała. Chcę tylko dodać inny sposób na Javę 8.
int[][] twoDim = { { 1, 2 }, { 3, 7 }, { 8, 9 }, { 4, 2 }, { 5, 3 } };
Arrays.sort(twoDim, (int[] o1, int[] o2) -> o2[0] - o1[0]);
System.out.println(Arrays.deepToString(twoDim));
Dla mnie jest to intuicyjne i łatwe do zapamiętania dzięki składni Java 8.
0
Author: user2830451,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-10 07:14:34
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-10 07:14:34