2017-10-28 2 views
0

Ich habe IDs mit folgendem Format: XXXXXXYYY00000Sortieren eine Schnur durch seine 6 ersten Zeichen

Was ich versuche zu tun ist, eine einzelne Zeichenfolge in alphabetischer Reihenfolge nach den ersten 6 Zeichen organisiert zu bekommen (die 6 x sind (sie können ein beliebiges Zeichen)) mit jeder ID neu durch eine neue Zeile Zeichen getrennt

Zum Beispiel:

AOPSIKPMI23495 würde vor BWLMBEPMI00001

Was ich habe, so weit ist:

String = String + this.ID + "\n"; 

Und ich habe keine Ahnung, wie ich mein Problem angehen soll, um es zu lösen.

Meine Frage ist die folgende: Wie organisiere ich meine IDs alphabetisch, nur durch ihre ersten 6 Zeichen (was bedeutet, wenn es ein Gleichstand mit den ersten 6 Zeichen gibt, sollte es nicht mit den nächsten 3 Zeichen auflösen) und behalte immer noch meine Schnur?

+2

Ich habe diese Frage abgelehnt, weil es ein Null-Aufwand-Anforderungsdump ist. Wenn Sie Ihre Frage bearbeiten können, um uns ein [minimales, vollständiges und überprüfbares Beispiel] (http://stackoverflow.com/help/mcve) Ihres Versuchs zu zeigen, oder um genau zu klären, wo Sie Schwierigkeiten haben, Dieser Downvote kann zurückgezogen werden. –

+5

Was bedeutet das Sortieren nach den ersten sechs Zeichen? Sortiere einfach die Strings, und per Definition werden sie auch nach den ersten sechs Zeichen sortiert. – Mureinik

+0

Die wahrscheinlichste Antwort wird sein, einen Stream zu verwenden und nach dem Präfix zu gruppieren. – jrtapsell

Antwort

2

Sie die Liste nach den ersten 6 sortieren Zeichen und verwenden Sie dann Collectors.joining, um jede Zeichenfolge mit einem "\n" Trennzeichen zu trennen.

+0

Ich akzeptierte diese Antwort, wollte aber fragen, was "e" hier ist. –

+1

'e' ist ein Bezeichner, der das aktuelle String-Objekt repräsentiert. siehe https://www.callicoder.com/java-lambda-expression-tutorial/ für ein Intro zu Lambdas. –

+1

mein Schlechter, ich dachte es war nicht. –

0

Sie können einfach einen Komparator implementieren nur die ersten 6 cahracters vergleichen:

class FirstSixCharComparator implements Comparator<String> { 
    @Override 
    public int compare(String a, String b) { 
     return a.substring(0,6)compareTo(b.substring(0,6)); 
    } 
} 

dann den Komparator verwenden, um eine Art auszuführen:

Collections.sort(list, new FirstSixCharComparator<String>()); //for collections  
Arrays.sort(array, new FirstSixCharComparator<String>());  //for arrays 
-1

Dieses Stück Code sollte Ihr Problem lösen, wenn es nicht dann können wir Vergleicher Art von Zeug schreiben, um jede Anforderung zu erfüllen, die Sie davon haben.

import java.util.ArrayList; 
    import java.util.Collections; 
    import java.util.List; 

public class Sample { 

    public static void main(String[] args) { 
     List<String> words = new ArrayList<String>(); 
     words.add("AOPSIKDDD23495"); 
     words.add("BWLMBEPMI00001"); 
     Collections.sort(words); 
     System.out.println(words);  
    } 

} 
+0

Das Problem ist, was Sie vorschlagen, würde das Hauptproblem, das ich habe, nicht lösen: Sortierung nur durch die ersten 6 Zeichen. Wenn die ersten 6 Zeichen gleich sind und die folgenden drei nicht, sollten die beiden nicht besonders sortiert sein, da die ersten 6 gleich sind. –

+0

Okay, nehmen Sie dieses Beispiel als Beispiel, [AOPSIKDDD23495, AOPSIKMMM23495, AOPSIKZZZ23495] und sagen Sie mir, was Sie als Ausgang erwarten –

Verwandte Themen