2016-08-02 14 views
1

Ich habe eine Frage bezüglich Java Collections.sort(), ich habe 2 Dateien, die von einem System generiert werden, und ich versuche, die beiden zu vergleichen, das erste, was ich tue benutze javas Collections.sort(), um beide Dateien neu zu schreiben, so dass sie sortiert sind, aber was ich gefunden habe, ist, dass diese Dateien eine vom System generierte Nummer in Position Offset 7 bis 18 haben und deswegen scheinen die Dateien nie zu passen. Ich habe einen zeilenweise gefilterten Vergleich geschrieben.Java Collections.sort() ohne eine Reihe von Zeichen

EEEDDDDR00002384800000000041929CAD... 
EEEDDDDR00002384900000000041956CAD... 
EEEDDDDR00002385000000000041938CAD... 
EEEDDDDR00002385200000000041965CAD... 
EEEDDDDR00002385700000000004198CAD... 
EEEDDDDR00002385800000000004199CAD... 
     ^--------^ 
System Generated and change the sort order. 

Gibt es eine Möglichkeit, dass der Verdichter in den Collections.sort und ignoriert diesen Bereich und möglicherweise andere Bereiche auf einer Linie?

+1

machen Sie eine benutzerdefinierte Vergleichsmethode oder Lambda. – Javant

+0

schreibe benutzerdefinierten Vergleicher und entferne diesen Bereich vor dem Vergleich – Sanjeev

Antwort

3

Sie könnten eine benutzerdefinierte Comparator verwenden, die eine Zeichenfolge mit den Indizes 7-18 entfernt vergleicht. Die Syntax von Java 8 für Comparator.compating macht das Schreiben solcher Komparatoren ziemlich elegant:

List<String> files = ...; 
Collections.sort(files, 
       Comparator.comparing(s -> s.substring(0, 7) + s.substring(18))); 
+0

Hast du ein erweitertes Arbeitsbeispiel ??? –

+0

@KevinRauer was genau meinst du? Wenn Sie erklären, was genau Sie vermissen, könnte ich es meiner Antwort hinzufügen. – Mureinik

+0

Das Beispiel von Java 8 ist ein wenig zu neu für mich .. Ich muss Logik hinzufügen, um zu testen, ob ich die Zeichen je nach den gesendeten Daten entfernen muss, und möglicherweise mehr Bereiche in dieser Zeile als ausschließen muss Gut.. –