2017-01-11 4 views
2

Ich möchte ein String-Array-Nachkommen durch seine dritte Spalte in Abstieg sortieren, das Problem ist, dass ich nach seinem numerischen Wert sortieren möchte.Java sortiere Array durch das dritte Element

Beispiel:

Wenn ich dieses Array zunächst:

String [][] array = new String[][] { 
    {"Barcelona", "156", "1604"}, 
    {"Girona", "256", "97"}, 
    {"Tarragona", "91", "132"}, 
    {"Saragossa", "140", "666"} 
} 

Ich will es, dies werden:

{ 
    {"Barcelona", "156", "1604"}, 
    {"Saragossa", "140", "666"}, 
    {"Tarragona", "91", "132"}, 
    {"Girona", "256", "97"} 
} 

Wie kann ich das tun?

+2

Vielleicht Inspiration ziehen aus http://stackoverflow.com/questions/5805602/how-to-sort-list-of -objects-by-some-property –

+1

'Arrays.sort (array, Comparator.comsparingInt ((String [] a) -> Ganzzahl.parseInt (a [2])). reversed()); ' – shmosel

Antwort

4

Sie können eine benutzerdefinierte Comparator<String[]> implementieren, um Ihre Vergleiche durchzuführen. So etwas wie,

String[][] array = new String[][] { { "Barcelona", "156", "1604" }, 
     { "Girona", "256", "97" }, { "Tarragona", "91", "132" }, 
     { "Saragossa", "140", "666" } }; 
Arrays.sort(array, new Comparator<String[]>() { 
    @Override 
    public int compare(String[] o1, String[] o2) { 
     return Integer.valueOf(o2[2]).compareTo(Integer.valueOf(o1[2])); 
    } 
}); 
System.out.println(Arrays.deepToString(array)); 

welche Ausgänge (wie gewünscht)

[[Barcelona, 156, 1604], [Saragossa, 140, 666], [Tarragona, 91, 132], [Girona, 256, 97]] 

Siehe auch, Object Ordering - The Java Tutorials (und vor allem im Unterabschnitt "Schreiben Sie Ihre eigene vergleichbare Typen") für mehr.

+0

Das Problem ist das Ich kann Comparator, einen guten Guide oder ein Video nicht verwenden. –

5

Sortieren nach asc:

Arrays.sort(array, Comparator.comparingInt(a -> Integer.valueOf(a[2]))); 

Sortieren nach desc:

Arrays.sort(array, Comparator.comparingInt(a -> Integer.valueOf(a[2])*-1)); 
// or this 
Arrays.sort(array, Comparator.comparingInt((String[] a) -> Integer.valueOf(a[2])).reversed()); 
Verwandte Themen