Ich habe ein wenig gegoogelt, war aber nicht in der Lage, eine Lösung für dieses ein bestimmtes Problem zu finden. Ich habe eine List
POJOs, die ein Feld (String-Typ) haben. Die displayCode
kann verschiedene Formate haben. Einige Beispiele:Vergleichen partiell-numerische Zeichenfolge ohne Casting
622
622-S
622-1
623
624
625
625-S
625-1
625-1-S
625-2
625-2-S
Nach der Sortierung sollten sie auch in der Reihenfolge wie oben gezeigt sein. Bei einem normalen s1.compareTo(s2);
bekomme ich einen Auftrag wie folgt aus:
1
10
100
101
102
...
die offensichtlich Hotel nicht, was ich brauche. Leider habe ich keine Pläne, wie ich das auf eine glatte Art und Weise erreichen könnte (und auch nicht anders). Bitte beachten Sie auch, dass ich nicht (mit ihm spielen, um Sie können) alles von Java 8.
-Code für Testzwecke verwenden können:
List<String> s = new ArrayList<String>(Arrays.asList(new String[] { "622", "622-S", "622-1", "623", "625",
"625-S", "625-1", "625-1-S", "625-2", "625-2-S", "6", "60", "666", "1", "2", "3" }));
Collections.sort(s,new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return 0;
}
});
System.out.println(s);
EDIT: Mein erster Gedanke würde werfen die Nummer bis zum ersten zu einem int und vergleiche das und arbeite mich auch zu den anderen Teilen. Das klingt jedoch nicht glatt.
Vielleicht möchten Sie sich auf das konzentrieren, was * funktioniert *, bevor Sie sich um * smooth * kümmern. –
Ihr einziges Problem scheint das S am Ende zu sein, denn normaler Vergleich wird Ihnen geben: 1, 2, 3, 6, 60, 622, 622-1, 622-S, 623, 625, 625-1, 625 -1-S, 625-2, 625-2-S, 625-S, 666 –
Können Sie eine "schlechte" Sortierung für die Elemente in dem Array anzeigen, das Sie oben aufgeführt haben? –