if-Block dynamisch aufbauen

sinoptik

Mitglied
Hallo,

ich lese eine csv-Datei ein und muss Werte rausfiltern. Die Filterkriterien können aber variabel sein (auch die Menge) und werden über eine GUI eingegeben. Die eingegebenen Filterwerte lese ich aus und speichere sie in einer Liste.
Da die Menge der Filterkriterien variabel ist, kann ich dafür keinen festen if-Block nutzen. Gibt es die Möglichkeit ein if dynamisch aufzubauen? Oder welche Optionen stehen noch zur Verfügung?

Vielen Dank und viele Grüße
 

sinoptik

Mitglied
Die Filterkriterien sind Wörter (Spaltennamen der csv-Datei + bestimmte Werte in den Spalten). In die Gui wird z.B. folgendes eingegeben: "Alter(14,16,18)".
"Alter" ist der Spaltenname, "14,16,18" sind die Filterkriterien. Es können natürlich mehrere Spalten (mit jeweiligen Filterkriterien) eingegeben werden, die durch Semikolon getrennt werden, aber das ist auch nicht mein Problem, das einlesen und speichern der Kriterien habe ich hingekriegt.
 

ChrisKu

Bekanntes Mitglied
Gibt es die Möglichkeit ein if dynamisch aufzubauen? Oder welche Optionen stehen noch zur Verfügung?

IMHO ist so was eigentlich eher eine Sache für eine wirkliche Datenbankanwendung. Dort kann man sehr schön dynamische Abfragen gestalten. Ich vermute aber aus der Fragestellung, Du willst es eher zu Fuss machen.

Sonecc hat es eigentlich schon gesagt:
Kriterien sammeln und dann mithilfe von schleifen die Bedingungen und Kriterien prüfen

Hierauf basierend habe ich einmal ein kleines Beispiel zusammengeschustert. Hierbei ist jeder "Datensatz" ein String[] Objekt, die "Datenbank" ist eine ArrayList<String[]>. Die Suchkriterien habe ich in eine HashMap geschrieben: Der Key ist die Spaltennummer und der Value vom Typ String[] enthält alle Werte, die die Spalte annehmen kann (hier mal als OR Verknüpfung). Die Bedingungen der einzelnen Spalten sind mit AND verknüpft (also ein Verhalten wie bei Excel oder Calc mit der AutoFilter Funktion), Ein paar Kommentare habe ich in den Code geschrieben - sonst poste einfach noch mal.

Code:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;

public class Dynif {

   

    public Dynif() {
        
        // Ein paar Daten
        ArrayList<String[]>dataSet = new ArrayList<String[]>();
        String[] data1 = new String[]{"1", "Meyer", "18", "Hamburg"};
        dataSet.add(data1);
        String[] data2 = new String[]{"2", "Müller", "16", "Hamburg"};
        dataSet.add(data2);
        String[] data3 = new String[]{"3", "Schulz", "16", "München"};
        dataSet.add(data3);
        

        // Suchkriterum: Integer ist die Spalte und String[] die möglichen Werte für die Spalte
        // Für jeweils eine Spalte sind die Kriterien OR Bedingungen, für die verschiedenen
        // Spalten AND Verknüpfungen
        HashMap<Integer, String[]> searchCriteria = new HashMap<Integer, String[]>();
        // Suche alle 16 oder 18 Jährigen aus Hamburg
        searchCriteria.put(2, new String[]{"16", "18"});
        searchCriteria.put(3, new String[]{"Hamburg"});
        ArrayList<String[]> results = getResult(searchCriteria, dataSet);
        // Gebe das Ergebnis aus
        printData(results);
        
    }
    
    // Durchlauf aller Suchkriterien
    private ArrayList<String[]> getResult(HashMap<Integer, String[]> searchCriteria, ArrayList<String[]>dataSet){
        
        Set<Integer> keys = searchCriteria.keySet();
        ArrayList<String[]> results = dataSet;
        for (int key:keys){
            // Das jeweilige Zwischenergebnis wird nach dem Kriterium für die nächste Spalte gefiltereed
            results = evalCriterion(key, searchCriteria.get(key), results);
        }
        return results;
    }
    
    // Filterung nach den Suchkriterien für jeweils eine Spalte
    private ArrayList<String[]> evalCriterion(int column, String[] vals, ArrayList<String[]> data){
        ArrayList<String[]> results = new ArrayList<String[]>();
        for (int i = 0; i < data.size(); i++){
            for (int j = 0; j < vals.length; j++){
                if (data.get(i)[column].equals(vals[j])){
                    results.add(data.get(i));
                    break;
                }
            }
        }
        return results;
    }

    
    private void printData(ArrayList<String[]> filteredData){
        for (int i = 0; i < filteredData.size(); i++){
            for (int j = 0; j < filteredData.get(i).length; j++){
                System.out.print(filteredData.get(i)[j] + " ");
            }
            System.out.println();
        }
    }

    public static void main(String args[]) {
        new Dynif();
    }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Größter zusammenhängender Block gleicher Zeichen im String Java Basics - Anfänger-Themen 1
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 0
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 5
D try/catch-Block bei for-Schleife Java Basics - Anfänger-Themen 14
Zwanglos Warum wird nur die erste Zeile im while Block ausgeführt? Java Basics - Anfänger-Themen 8
B Try-Catch Block Java Basics - Anfänger-Themen 3
F Mehrere Exceptions in einem Catch-Block abfangen Java Basics - Anfänger-Themen 12
E Synchronisierte Methoden vs. Synchronized(lockObject) Block Java Basics - Anfänger-Themen 7
A break; mit Einfluss hinter else if Block Java Basics - Anfänger-Themen 3
tsom Erste Schritte itext Text als Block auf neue Seite Java Basics - Anfänger-Themen 0
J Code in Try-Catch Block wird nicht komplett ausgeführt Java Basics - Anfänger-Themen 5
A Nicht zu findender Fehler in einem try/catch Block Java Basics - Anfänger-Themen 6
E Buchstaben verhindern / Try & Catch Block Java Basics - Anfänger-Themen 3
D if block mit equals im rumpf Java Basics - Anfänger-Themen 11
L Warum ist der catch-Block nicht erreichbar ? Java Basics - Anfänger-Themen 8
B Input/Output NIO: Block-Move Java Basics - Anfänger-Themen 14
T Threads Join() = Block? oO Java Basics - Anfänger-Themen 4
B Classpath static block - Verwirrung Java Basics - Anfänger-Themen 2
J Methoden Wert im Block einer for-Schleife wird nicht aktualisiert Java Basics - Anfänger-Themen 9
J Grosses einmaleins 5er Block Ausgabe Java Basics - Anfänger-Themen 3
S Schlüsselworte Thread Block sprerren Java Basics - Anfänger-Themen 8
H .class und static Block ? Java Basics - Anfänger-Themen 4
N Catch Block in Try erzwingen Java Basics - Anfänger-Themen 14
E Problem mit for schleife/ try-catch block Java Basics - Anfänger-Themen 7
N try and catch block in finally Java Basics - Anfänger-Themen 8
H Finalize Block blockiert Programmablauf Java Basics - Anfänger-Themen 15
A Datentypen problem return aus try-block Java Basics - Anfänger-Themen 4
D Scanner hasNext(Line)() Block Problematik... Java Basics - Anfänger-Themen 6
B Exception vor catch Block definieren Java Basics - Anfänger-Themen 9
V Was ist ein Try-Catch Block Java Basics - Anfänger-Themen 4
Z Applet mit einem beweglichem Block Java Basics - Anfänger-Themen 7
G static block und konstanten Java Basics - Anfänger-Themen 2
R wait() in synchronized - Block oder nicht? Java Basics - Anfänger-Themen 4
G Verschiedene Exceptions zu gleichem Block Java Basics - Anfänger-Themen 6
G InputStream im finally-Block schließen Java Basics - Anfänger-Themen 7
F reiner Code-Block Java Basics - Anfänger-Themen 6
G If-Block und String Java Basics - Anfänger-Themen 3
M Exception->mehrere Exceptions in einem Catch Block behand Java Basics - Anfänger-Themen 4
districon Dynamisch Programmierung/Backtracking/Memoization Java Basics - Anfänger-Themen 3
T Klassen Denkfehler im Klassen "dynamisch" instanzieren? Java Basics - Anfänger-Themen 4
J Verundung dynamisch gestalten Java Basics - Anfänger-Themen 21
B Folgende Abfrage dynamisch programmieren? Java Basics - Anfänger-Themen 8
R Datenbank-Werte dynamisch ausgeben Java Basics - Anfänger-Themen 19
D new arraylist (List) dynamisch erstellen Java Basics - Anfänger-Themen 1
B Klassen Klasse dynamisch laden. Java Basics - Anfänger-Themen 8
N Dynamisch erzeugtes Label wird nicht angezeigt, TextField schon Java Basics - Anfänger-Themen 1
D Koordinatensystem dynamisch anpassen Java Basics - Anfänger-Themen 17
J Tableview, ObservableList ein bisschen dynamisch Java Basics - Anfänger-Themen 6
C Array - Länge dynamisch übergeben Java Basics - Anfänger-Themen 7
D Erste Schritte Dynamisch Objekte erzeugen und diese durchsuchen Java Basics - Anfänger-Themen 7
GreyFox Object dynamisch mit werten versehen. Java Basics - Anfänger-Themen 4
G Array dynamisch ausgeben Java Basics - Anfänger-Themen 3
S JTable dynamisch mit Datenbankinhalten füllen Java Basics - Anfänger-Themen 6
F Erste Schritte If Bedingung in Schleife dynamisch erweitern Java Basics - Anfänger-Themen 4
K JLabel zur Laufzeit dynamisch erzeugen Java Basics - Anfänger-Themen 7
V Text aus einer .txt dynamisch ins applet einpassen Java Basics - Anfänger-Themen 0
Y Eingabe-Formular mit JSP dynamisch machen - j/n/wie? Java Basics - Anfänger-Themen 2
N Dynamisch JTree erstellen Java Basics - Anfänger-Themen 3
R Objekte dynamisch erstellen? Java Basics - Anfänger-Themen 14
C Variablen Array dynamisch halten und ausrechnen Java Basics - Anfänger-Themen 14
N Ergebnisse dynamisch in Tabelle schreiben Java Basics - Anfänger-Themen 3
G JObjekte dynamisch vom Server erzeugen lassen Java Basics - Anfänger-Themen 4
I Dynamisch erzeugten Buttons Methoden zuweisen Java Basics - Anfänger-Themen 6
H Objekte dynamisch erzeugen? Java Basics - Anfänger-Themen 6
M Variablen dynamisch variableninhalt von Object auslesen Java Basics - Anfänger-Themen 4
M Static Variable "dynamisch" aufrufen? Java Basics - Anfänger-Themen 8
B Klassen Objekte während der Laufzeit dynamisch anlegen Java Basics - Anfänger-Themen 8
A JButtons dynamisch generieren mit verschiedenen actionhandlern Java Basics - Anfänger-Themen 6
P Scrollpane mit dynamisch erzeugten Komponenten Java Basics - Anfänger-Themen 3
U JPanel dynamisch gestalten Java Basics - Anfänger-Themen 7
R Liste graphischer Objekte z.B. JButton dynamisch erstellen Java Basics - Anfänger-Themen 13
A Dynamisch die Anzahl der Threads in der Cyclic Barrier ändern Java Basics - Anfänger-Themen 2
K Datentypen Full qualified Name dynamisch gestalten Java Basics - Anfänger-Themen 7
M For-Schleifen dynamisch generieren? Java Basics - Anfänger-Themen 10
sqsh statische jlabels dynamisch verwalten Java Basics - Anfänger-Themen 2
O Wie kann man das einfach lösen? (dynamisch viele Attribute) Java Basics - Anfänger-Themen 6
L Tray-Einträge und dazu passende ActionListener dynamisch erzeugen? Java Basics - Anfänger-Themen 2
D JPanel dynamisch anpassen Java Basics - Anfänger-Themen 5
S Dialog dynamisch vergrößern Java Basics - Anfänger-Themen 2
S Dynamisch Zeit auslesen Java Basics - Anfänger-Themen 11
M JTextPane dynamisch erzeugen Java Basics - Anfänger-Themen 2
J Aufgaben Dynamisch auf Pool von Threads verteilen. Java Basics - Anfänger-Themen 3
D ArrayList dynamisch befüllen Java Basics - Anfänger-Themen 14
G Objekteigenschaften dynamisch erzeugen Java Basics - Anfänger-Themen 7
jnoob Checkbox in Dialog Dynamisch erstellen Java Basics - Anfänger-Themen 2
K suche nicht dynamisch Datenstruktur Java Basics - Anfänger-Themen 6
J ListModel dynamisch und schnell aber sicher ändern Java Basics - Anfänger-Themen 7
M Dynamisch Instanzen erstellen. Java Basics - Anfänger-Themen 4
G Zweidimensionales Array - dynamisch Java Basics - Anfänger-Themen 4
B arrays dynamisch vergrößern Java Basics - Anfänger-Themen 5
V Kundenklasse dynamisch erzeugen und id hochzählen? Java Basics - Anfänger-Themen 4
C Dynamisch durch alle Objektvariablen eines Objektes iteriere Java Basics - Anfänger-Themen 15
P JPanel dynamisch mit ActionListener verwalten Java Basics - Anfänger-Themen 3
R Arraygroesse dynamisch anpassen Java Basics - Anfänger-Themen 8
X this dynamisch, super statisch? Java Basics - Anfänger-Themen 3
G Namen von ArrayListen dynamisch erzeugen Java Basics - Anfänger-Themen 4
H variable dynamisch ändern Java Basics - Anfänger-Themen 2
G Klasse dynamisch ohne Datei compilieren: Fehler Java Basics - Anfänger-Themen 4
G Klasse dynamisch nachladen: Fehler Java Basics - Anfänger-Themen 9
T Array Dynamisch Erweiterm Java Basics - Anfänger-Themen 15

Ähnliche Java Themen

Neue Themen


Oben