2017-05-03 2 views
0

Im mit Mühe einen Weg herauszufinden cetain Zahlen im sortieren Weg versuchen, Gehirn Sturm zu sortieren, dachte aber die Gemeinde hat eine Antwort bereitsZahl in Java Sortierung

Was Im Versuch sind zu sortieren Zahlen wie:

  1. FA8Z-7.406.024-AB
  2. DS7Z-6.632.394-D
  3. AA8Z-6.632.394-S
  4. SR3Z-15342-H
  5. TR3 Z-72B39842-S
  6. TR3Z-7239842-S

Das Sortierverfahren zunächst durch die Mitte gehen soll, dann die erste Zahl, dann schließlich die letzte Nummer

Wenn ich über die Liste sortieren, es sollte wie folgt aussehen:

  1. SR3Z-15342-H
  2. AA8Z-6632394-S
  3. DS7Z-6632394-S
  4. TR3Z-7239842-S
  5. TR3Z-72B39842-S
  6. FA8Z-7406024-AB

Wenn die mittlere Zahl einen Brief in ihm hat, soll der Brief außer Acht gelassen werden, aber es soll nach sortiert werden irgendwelche Zahlen, die der Zahl ähneln, aber ohne den Buchstaben (IE der TR3Z).

Edit: Fest Beispiel

+4

erstellen [Vergleicher] (https://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html). – Compass

+0

und post den Code, nach dem, wenn Sie Probleme haben, sie angeben. – SomeDude

+1

lesen Sie bitte [Erstellen eines minimalen, vollständigen und überprüfbaren Beispiels] (http://stackoverflow.com/help/mcve) –

Antwort

0

Unter der Annahme, alle entried auf das gleiche Format zu entsprechen, dies mit Ausnahme machen soll, wenn FA8Z-7406024-AB wird das zweite Element in sortierten Array aufgrund Mittelwert basierend Vergleich:

Comparator<String> comparator = (s1, s2) -> { 
    String[] tokens1 = s1.split("-"); 
    String[] tokens2 = s2.split("-"); 

    int number1 = Integer.parseInt(tokens1[1].replaceAll("[^0-9]", "")); 
    int number2 = Integer.parseInt(tokens2[1].replaceAll("[^0-9]", "")); 

    //Compare the numbers 
    if(number1 - number2 == 0 && tokens1[1].length() == tokens2[1].length()){ 
     //Compare the Strings 
     return tokens1[0].compareTo(tokens2[0]) == 0 ? tokens1[2].compareTo(tokens2[2]) : tokens1[0].compareTo(tokens2[0]); 
    }else if (tokens1[1].length() != tokens2[1].length()){ 
     return tokens1[1].length() - tokens2[1].length(); 
    }else{ 
     return number1 - number2; 
    } 
}; 

Hier ein Beispiel:

List<String> list = Arrays.asList("FA8Z-7406024-AB", "DS7Z-66329294-D", "AA8Z-66329294-S", "SR3Z-15342-H", "TR3Z-72B381942-S", "TR3Z-72381942-S"); 

Collections.sort(list, comparator); 

System.out.println(list); 
+1

Bitte erläutern Sie genug und ermutigen Sie nicht, Fragen zu beantworten, die nicht klar sind! – Yahya