1500 Zeilen lange Liste nach casesensitive Duplikaten durchsuchen

friednoodles

Aktives Mitglied
Hallo, ich habe folgendes Problem:
In einer 1500 Zeilen langen Liste muss ich exakte Duplikate entfernen. Also z.B. aus

Organisation = ORGANISATION
organisation = organisation
Organisation = ORGANISATION

soll

Organisation = ORGANISATION
organisation = organisation

werden. Wichtig ist auch das die Reihenfolge die selbe bleibt.
Mein erster Lösungsansatz war in Excel, dort habe ich einfach die Liste nach dem Alphabet sortiert und mit einer Formel die Überprüft ob zwei übereinander liegende Zeilen gleich sind und konnte Duplikate dann löschen. Das ist aber sub-optimal da ich im nachhinein die ursprungs Reihenfolge nicht mehr herstellen kann.
Dann habe ich mir überlegt das man mit Java in Eclipse doch bestimmt eine bessere und schneller Lösung finden könnte. Kann mich da jemand in die richtige Richtung stoßen?

Ich meine mit (s1.equals(s2)) könnte ich so etwas ähnliches auch in Java nachbauen, aber wie bekomme ich eine so Lange liste verarbeitet? Da schreib ich mir ja die Finger wund.

Liebe Grüße, Friednoodles
 

max40

Bekanntes Mitglied
Wenn du aus einer Datei einlesen musst z.B.
Java:
List<String> list1 = new ArrayList<String>();
try (Scanner scanner = new Scanner(new File("C:/Temp/textfile.txt"));){
    while(scanner.hasNextLine()) {
        String line = scanner.nextLine();
        if (!list1.contains(line)) {
            list1.add(line);
        }
    }
} catch (FileNotFoundException e) {
    e.printStackTrace();
}

oder wenn die Liste schon vorhanden ist:
Java:
List<String> list2 = list1.stream()
         .distinct()
         .collect(Collectors.toList());
 

Flown

Administrator
Mitarbeiter
Wenn man das File gleich aussortiert haben möchte:
Java:
try {
  Path file = Path.of("path2File");
  Iterable<String> lines;
  try (Stream<String> stream = Files.lines(file)) {
    lines = stream.collect(Collectors.toCollection(LinkedHashSet::new));
  }
  Files.write(file, lines);
} catch (IOException e) {
  e.printStackTrace();
}
 

friednoodles

Aktives Mitglied
Vielen Dank übrigens, habe es noch hinbekommen mit einer Excel Makro.
Sollte ich das nächste mal wieder so eine Aufgabe haben werde ich mich an einer Java orientierten Lösung probieren.
Hier die Makro falls es jemanden interessieren sollte.
Java:
Option Explicit

Public Function doDeleteDublicates()
Dim sheet As Worksheet

Set sheet = ActiveWorkbook.Sheets(1)

Dim row As Integer
row = 1

While row < 1600
    Dim s As String
    s = sheet.Cells(row, 1)
    If s <> "" Then
         s = Split(s, "=")(0)
         deleteByValue sheet, s, row
    End If
    row = row + 1
Wend

MsgBox ("Überprüfungn fertig")

End Function

Private Function deleteByValue(sheet As Worksheet, ByVal value As String, searchRow As Integer)
Dim row As Integer
row = 1
While row < 1600
    Dim s As String
    s = sheet.Cells(row, 1)
    If s <> "" Then
        s = Split(s, "=")(0)
        If (row <> searchRow And value = s) Then
            sheet.Cells(row, 1) = "DUBLICATE"
        End If
    End If
    row = row + 1
Wend

End Function
 

Neue Themen


Oben