Best Practice Such Filter Maschine

Buroto

Mitglied
Ich habe die folgende Aufgabe auf Internet gesehen.
Wie will ich antworten ?
Ich habe darüber nachgedacht, Hashmap zu verwenden und die rows als Value bzw wert und die Spalten als Schlüssel einzufügen
Aber ich hörte auf, und ich weiß nicht, wie ich weitermachen soll

1666181854397.png

Java:
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        //System.out.println(new MapBuilder());

   
        String csvFile ="employees.csv";
        String line = null;
        String csvSplit = ",";

        BufferedReader br;
// Read the csv file
        {
            try {
                br = new BufferedReader (new FileReader(csvFile));
                line = br.readLine();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            System.out.println(line);
        }

        // Creat Map List (headers)
        Map<String,ArrayList<String>> map = new HashMap<String,ArrayList<String>>();
        ArrayList<String> headers = new ArrayList<String>();

        //header in die map stecken und schon mal die dazugehörige ArrayList initialisieren
        for(String s : Arrays.asList(line.split(";"))){
            map.put(s, new ArrayList<String>());
        }
        //nur die header in eine Liste für die spätere iteration
        headers.addAll(map.keySet());

    }
}
 

fhoffmann

Top Contributor
Ich würde erst einmal eine Klasse "Mitarbeiter" (oder "Employee") erstellen, die die benötigten Felder enthält.
Die csv-Datei kannst du dann in eine Liste von Mitabeitern einlesen.
Und anschließend kannst du aus dieser Liste beliebige Inhalte auslesen (z.B. das Durchschnittsgehalt).
 

KonradN

Super-Moderator
Mitarbeiter
Evtl. noch etwas ausführlicher:

Das mit der HashMap ist aus meiner Sicht nicht wirklich zielführend, denn es gibt nicht einen Key. Es soll ja nach verschiedenen Attributen gesucht werden können.

Der erste Schritt ist dann erst einmal, dass man die Daten einliest. Dazu erstellt man sich dann eine Klasse, die diese Daten aufnehmen kann. Dann liest Du die CSV Datei Zeile für Zeile ein und erstellst aus jeder Zeile eine neue Instanz der Klasse. Diese speicherst Du dann im Anschluss in einer List.

Wenn Du dann irgendwas suchst oder filtern musst, dann kannst Du immer die Liste durchgehen.

Ein ganz wichtiger Punkt ist dabei dann aus meiner Sicht, dass man die Aufgabe in Teilaufgaben unterteilt um dann zumindest mehrere Methoden zu bekommen. Obwohl die Komplexität hier nicht besonders hoch ist, wird auch hier schon direkt deutlich: Es ist einfach viel zu komplex, als dass man alles einfach in eine main Methode quetschen sollte.
 

Buroto

Mitglied
Evtl. noch etwas ausführlicher:

Das mit der HashMap ist aus meiner Sicht nicht wirklich zielführend, denn es gibt nicht einen Key. Es soll ja nach verschiedenen Attributen gesucht werden können.

Der erste Schritt ist dann erst einmal, dass man die Daten einliest. Dazu erstellt man sich dann eine Klasse, die diese Daten aufnehmen kann. Dann liest Du die CSV Datei Zeile für Zeile ein und erstellst aus jeder Zeile eine neue Instanz der Klasse. Diese speicherst Du dann im Anschluss in einer List.

Wenn Du dann irgendwas suchst oder filtern musst, dann kannst Du immer die Liste durchgehen.

Ein ganz wichtiger Punkt ist dabei dann aus meiner Sicht, dass man die Aufgabe in Teilaufgaben unterteilt um dann zumindest mehrere Methoden zu bekommen. Obwohl die Komplexität hier nicht besonders hoch ist, wird auch hier schon direkt deutlich: Es ist einfach viel zu komplex, als dass man alles einfach in eine main Methode quetschen sollte.
Ich kam gestern auf die Idee wo ich einen dictionery aufbauen bzw Hashtable wo alle attributen mit der ID key verbinden
Ihre Meinung ??
 

KonradN

Super-Moderator
Mitarbeiter
Man kann bestimmt vieles machen, aber die Frage ist immer: Ist dies notwendig?

Der erste Ansatz ist immer, eine einfache, gradlinige Lösung zu bauen. Und hier haben wir nicht einen offensichtlichen Key, denn es soll nach unterschiedlichen Spalten gefiltert werden können.

Dann haben wir auch keine speziellen Anforderungen bezüglich große Datenmengen und so. (CSV Datei lässt eher darauf schließen, dass es nur begrenzte Daten sind. Zumal wir ja auch im Hauptspeicher arbeiten!)

Daher: Keep It Simple, Stupid (KISS): Mach es erst einmal in einer einfachen Art und Weise. Ein Bedarf, es zu verkomplizieren, sehe ich schlicht nicht.

Wenn die Anforderungen dann nicht erfüllt sind (Es ist zu langsam oder so), dann kann man sich überlegen, wie man es weiter lösen kann. Aber dann wird das auch im Detail überlegt. Wenn die Anzahl der Datensätze so hoch ist, dass ein durchgehen der Datensätze zu lange braucht, dann schaut man, was es für Alternativen gibt. Da der Algorithmus zum filtern in O(n) durchläuft deutet das auf sehr viele Datensätze hin ... Und dann haben wir vermutlich auch ein Speicher Problem. Daher macht es dann tatsächlich Sinn, z.B. auf eine Datenbank zurück zu greifen. (Sowas kann man sich auch selbst schreiben - aber das ist dann etwas mehr als nur die Verwendung von einer HashMap oder so.)

Daher der wichtige Punkt: Nie etwas unnötig kompliziert machen!
 

Jw456

Top Contributor
Du hast doch schon einen guten Ansatz von Konrad in Post #4 bekommen.

Zurück zu deinem ersten Code einlesen der CSV. Hier list du nur maximal eine Zeile (ein Datensatz) und nicht die ganze Datei ein.
Tipp alle Datensätze einlesen Schleife.
Wie schon gesagt wurde erstelle eine Klasse die einen Datensatz aufnimmt. Alle Attribute die in der CSV sind sollten in der Klasse sein.

Tipp 2 : was steht in der ersten Zeile?

Was willst du mit einer Hashmap der Datensatz hat ja nicht nur die ID und den Namen (Key, Value) sondern noch mehr wie du in der Aufgabe weiter unten , oder der CSV Datei, siehst.
 

Buroto

Mitglied
Man kann bestimmt vieles machen, aber die Frage ist immer: Ist dies notwendig?

Der erste Ansatz ist immer, eine einfache, gradlinige Lösung zu bauen. Und hier haben wir nicht einen offensichtlichen Key, denn es soll nach unterschiedlichen Spalten gefiltert werden können.

Dann haben wir auch keine speziellen Anforderungen bezüglich große Datenmengen und so. (CSV Datei lässt eher darauf schließen, dass es nur begrenzte Daten sind. Zumal wir ja auch im Hauptspeicher arbeiten!)

Daher: Keep It Simple, Stupid (KISS): Mach es erst einmal in einer einfachen Art und Weise. Ein Bedarf, es zu verkomplizieren, sehe ich schlicht nicht.

Wenn die Anforderungen dann nicht erfüllt sind (Es ist zu langsam oder so), dann kann man sich überlegen, wie man es weiter lösen kann. Aber dann wird das auch im Detail überlegt. Wenn die Anzahl der Datensätze so hoch ist, dass ein durchgehen der Datensätze zu lange braucht, dann schaut man, was es für Alternativen gibt. Da der Algorithmus zum filtern in O(n) durchläuft deutet das auf sehr viele Datensätze hin ... Und dann haben wir vermutlich auch ein Speicher Problem. Daher macht es dann tatsächlich Sinn, z.B. auf eine Datenbank zurück zu greifen. (Sowas kann man sich auch selbst schreiben - aber das ist dann etwas mehr als nur die Verwendung von einer HashMap oder so.)

Daher der wichtige Punkt: Nie etwas unnötig kompliziert machen!
Echt vielen Dank von Herz für die Unterstützung !!!!!
 

Buroto

Mitglied
Du hast doch schon einen guten Ansatz von Konrad in Post #4 bekommen.

Zurück zu deinem ersten Code einlesen der CSV. Hier list du nur maximal eine Zeile (ein Datensatz) und nicht die ganze Datei ein.
Tipp alle Datensätze einlesen Schleife.
Wie schon gesagt wurde erstelle eine Klasse die einen Datensatz aufnimmt. Alle Attribute die in der CSV sind sollten in der Klasse sein.

Tipp 2 : was steht in der ersten Zeile?

Was willst du mit einer Hashmap der Datensatz hat ja nicht nur die ID und den Namen (Key, Value) sondern noch mehr wie du in der Aufgabe weiter unten , oder der CSV Datei, siehst.
Danke sehr mach ich
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Queue.remove() -> no such element exception Allgemeine Java-Themen 17
B Such-String parsen mit Klammern Allgemeine Java-Themen 2
D replaceAll => no such java.lang.NoSuchMethodError Allgemeine Java-Themen 5
G no such child Allgemeine Java-Themen 6
T Files an das Betriebsystem übergeben such ideen! Allgemeine Java-Themen 3
T Warum mein such-tool schneller als Windows such-tool? Allgemeine Java-Themen 5
S Nachrichten Filter Programm Allgemeine Java-Themen 14
W JSP / Tomcat / Filter / Preprocessing Allgemeine Java-Themen 7
L Erste Schritte Liste von Datums filter nach Monate Allgemeine Java-Themen 4
E Lambda filter performance Allgemeine Java-Themen 2
L Gauß Filter Allgemeine Java-Themen 2
V Regex Bereichs Filter Allgemeine Java-Themen 4
E JAVA URL abfangen und weiterleiten? Filter? Allgemeine Java-Themen 6
S Aus einer Liste<Oberklasse> alle Elemente die eine bestimmte Unterklasse von Oberklasse haben filter Allgemeine Java-Themen 8
G log4j package filter Allgemeine Java-Themen 10
martin82 Regex - JTable - Filter Allgemeine Java-Themen 10
T JXL => Filter Allgemeine Java-Themen 2
T Sortierter assoziativer Speicher mit Filter Allgemeine Java-Themen 4
J Filter für String (HTML) Allgemeine Java-Themen 2
C File-Filter in JFileChooser Allgemeine Java-Themen 4
berserkerdq2 IJVM, ich tue auf meinen Stack 100 und 120 rein, danach subtrahiere ich, macht die Maschine 100-120 oder 120-100? Allgemeine Java-Themen 8
J Virtuelle Maschine vs Compiler Allgemeine Java-Themen 12
I Java virutelle Maschine Allgemeine Java-Themen 12
G Methodenaufrufe wie state maschine Allgemeine Java-Themen 4
G Java Maschine? Allgemeine Java-Themen 12

Ähnliche Java Themen

Neue Themen


Oben