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());

    }
}
 
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).
 
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.
 
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 ??
 
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!
 
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.
 
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 !!!!!
 
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
 

Zurück
Oben