Datentypen TreeSet aus einer List<String[]> befüllen

dicke_nudel

Mitglied
Hallo an alle :). Da ich hier schon seit ein paar Tagen Fragen stelle und ich immer Hilfe bekomme möchte ich mich mal herzlich bedanken!
[DUKE]DANKE SCHÖN![/DUKE]

Nun zu meinem nächsten Anfängerproblem. Ich habe hier eine Liste von String[] welche in eine TreeSet rein sollen. Ziel soll es sein das aus der tabelle1 und tabelle2 alle Werte in dem TreeSet enthalten sind. Natürlich nur einmalig. Also keine Duplikate. (Wenn ich das richtig verstanden habe ist das bei Sets eh immer so. Verbessert mich wenn ich da falsch liege).

Die Funktion add() kenne ich. Mit dieser habe ich es aber nicht hingekriegt.
adAll() kann ich nicht verwenden da dieser eine Collection erwartet und keine List<String>.

Kann mir bitte einer Verraten wie ich nun mein TreeSet befüllen kann?




Java:
private int CollectVariants(Reader table1,Reader table2)
{
    List<String[]> tabelle1;
    List<String[]> tabelle2;
    TreeSet<String> variant= new TreeSet<String>() ;
    
    tabelle1 = table1.read_csv();
    tabelle2 = table2.read_csv();
    
    // HIER SOLL DAS TREESET GEFÜLLT WERDEN
    for (int y =0;y>tabelle1.lastIndexOf(tabelle1);y++)
    {
        
       

        //System.out.print(tabelle1.get(y)[0]);
        //for(int x=0;x<tabelle1.get(x).length;x++)
        //    System.out.print(tabelle1.get(y)[x]+"\t");
    
        //System.out.print("\n");
    }
    
    Iterator<String> iter;
    iter = variant.iterator();
    
    while(iter.hasNext())
    {
        System.out.print(iter.next());
        
    }
    
    
    
    return 0;
}
 

Shoox

Mitglied
Du hast hier ja eine Liste mit String[], dh du musst zuerst eine Schleife zum auslesen der Liste machen und dann in der Schleife noch eine Schleife zum Auslesen des String[] und hier machst du dann das add für dein TreeSet.

Java:
for (String[] line : tabelle1) {
   for (String value : line) {
      variant.add(value);
   }
}
 

ARadauer

Top Contributor
Also keine Duplikate. (Wenn ich das richtig verstanden habe ist das bei Sets eh immer so. Verbessert mich wenn ich da falsch liege).
ja stimmt...

ok du hast eine liste mit arrays wo strings drin sind...

add fügt einen string ein..
für jedes array in der liste , für jeden string im array -> einfügen

Java:
public static void addDataToSet(List<String[]> src, TreeSet<String> dest){
     for(String[] arr: src){
        for(String str: arr){
           dest.add(str);
        }
     }
]

adAll() will eine Collection.. String[] ist keine Collection..
Die klasse Arrays bietete dir eine Methode mit dem du aus einem array eine liste machen kannst. eine Liste ist eine Collection...
Arrays.asList

also für jedes array in der liste -> as List -> einfügen

Java:
 public static void addDataToSet(List<String[]> src, TreeSet<String> dest){
     for(String[] arr: src){
        dest.addAll(Arrays.asList(arr));
     }
  }

Ich bevorzuge die erste variante, da klar ist was hier passiert...

direkt die liste mit arrays auf einemal einfügen wird nicht klappen...
 

dicke_nudel

Mitglied
Du hast hier ja eine Liste mit String[], dh du musst zuerst eine Schleife zum auslesen der Liste machen und dann in der Schleife noch eine Schleife zum Auslesen des String[] und hier machst du dann das add für dein TreeSet.

Java:
for (String[] line : tabelle1) {
   for (String value : line) {
      variant.add(value);
   }
}

Danke für die schnelle Antwort. Ich glaube ich verstehe was du meinst. Leider komme ich nicht mit deinem code klar. Kann ich den so direkt verwenden?

Wenn ich den so einsetze dann gibt er mir zwar eine Ausgabe. Aber nich ganz die die ich will.

Java:
private int CollectVariants(Reader table1,Reader table2)
{
    List<String[]> tabelle1;
    List<String[]> tabelle2;
    TreeSet<String> variant= new TreeSet<String>() ;
    
    tabelle1 = table1.read_csv();
    tabelle2 = table2.read_csv();
    
    
    for (String[] line : tabelle1) {
           for (String value : line) {
              variant.add(value);
           }
    }
    
    Iterator<String> iter;
    iter = variant.iterator();
    
    while(iter.hasNext())
    {
        System.out.print(iter.next());
        System.out.print("\n");
    }
    
    
    
    return 0;
}

Er gibt mir hier die erste Spalte aus (Alle daten) und die erste Zeile. Ich mag aber nur die erste spalte haben (ohne erste zeile).
 

dicke_nudel

Mitglied
ja stimmt...

ok du hast eine liste mit arrays wo strings drin sind...

add fügt einen string ein..
für jedes array in der liste , für jeden string im array -> einfügen

Java:
public static void addDataToSet(List<String[]> src, TreeSet<String> dest){
     for(String[] arr: src){
        for(String str: arr){
           dest.add(str);
        }
     }
]

adAll() will eine Collection.. String[] ist keine Collection..
Die klasse Arrays bietete dir eine Methode mit dem du aus einem array eine liste machen kannst. eine Liste ist eine Collection...
Arrays.asList

also für jedes array in der liste -> as List -> einfügen

Java:
 public static void addDataToSet(List<String[]> src, TreeSet<String> dest){
     for(String[] arr: src){
        dest.addAll(Arrays.asList(arr));
     }
  }

Ich bevorzuge die erste variante, da klar ist was hier passiert...

direkt die liste mit arrays auf einemal einfügen wird nicht klappen...


BOAH. Ich versteh nur Bahnhof. Ich les mir das mal ein paar hundert mal durch. Evtl. versteh ichs dann :) Danke für die Hilfe.
 

dicke_nudel

Mitglied
Ok ich habe das was Aradauer geschrieben hat soweit einsetzen können. Dies Funktioniert auch mit dem TreeSet<String>. Danke!

Ich habe gerade festgestellt das ich doch eine eine TreeSet<String[]> verwenden muss. Leider tut dann der Vorschlag von Aradauer nicht.

Ich muss bestimmt wieder eine geschachtelte Schleife machen, bin überfordert. :(

Java:
private int CollectVariants(Reader table1,Reader table2)
{
    List<String[]> tabelle1;
    List<String[]> tabelle2;
    TreeSet<String[]> variant= new TreeSet<String[]>() ;
    
    tabelle1 = table1.read_csv();
    tabelle2 = table2.read_csv();
    
    
    
    
        for(String[] arr: tabelle1){
        variant.addAll(Arrays.asList(arr[2])); //Das geht nicht mehr. Weil es nun keine TreeSet<String> sondern ein TreeSet<String[]> ist.
     }

    
    
    
    
    
    Iterator<String[]> iter;
    iter = variant.iterator();
    
    while(iter.hasNext())
    {
        System.out.print(iter.next());
        System.out.print("\n");
    }
    
    
    
    return 0;
}
 

Shoox

Mitglied
Leider komme ich nicht mit deinem code klar. Kann ich den so direkt verwenden?

Es ist nur ein Code-Schnipsel, fertige Lösungen gibts hier nicht ;)
Falls du die for-Schleife selbst nicht verstehst:

Java:
for ( String[] line : tabelle1 ) {
   ...
}
macht das gleiche wie
Java:
for (int i = 0; i < tabelle1.size(); i++){
   String[] line = tabelle1.get(i);
   ...
}



Ok ich habe das was Aradauer geschrieben hat soweit einsetzen können. Dies Funktioniert auch mit dem TreeSet<String>. Danke!

Ich habe gerade festgestellt das ich doch eine eine TreeSet<String[]> verwenden muss. Leider tut dann der Vorschlag von Aradauer nicht.

Ich muss bestimmt wieder eine geschachtelte Schleife machen, bin überfordert. :(

Brauchst du dann nicht, aber mir wird nicht ganz klar, was du eigentlich willst und irgendwie kommt es mir so vor, als würdest du auch nicht wissen was du willst ^^
 

dicke_nudel

Mitglied
Da hast du zum Glück nur teilweise Recht . Beim erstellen des Threads hat sich der Fehler eingeschlichen das ich ein [] bei dem TreeSet vergessen habe.

Ziel ist es eine CSV einzulesen. Dies klappt auch wunderbar. Nun übergebe ich die CSV an die Funktion (das klapp ja auch; Reader). Mit der readAll() kriege ich dann auch eine List<String[]>. Die Daten haben ich überprüft. Alles super.

Mein Ziel ist es nun für jede Spalte alle möglichen Werte festzuhalten. Also Spalte 0 [Wert1,Wert2,Wert3] etc.

Wichtig ist das ich zu jeder Spalte die Werte kenne da ich damit an anderer Stelle weiterarbeiten muss.
 

dicke_nudel

Mitglied
variant.addAll(Arrays.asList(arr[2]));
->
variant.add(arr);

Hab ich schon versucht.
Da meckert er mir aber.

Code:
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.String; cannot be cast to java.lang.Comparable
    at java.util.TreeMap.put(Unknown Source)
    at java.util.TreeSet.add(Unknown Source)
    at alterapp.Transformer.CollectVariants(Transformer.java:74)
    at alterapp.Transformer.<init>(Transformer.java:20)
    at alterapp.Alterapp.main(Alterapp.java:18)
 
Zuletzt bearbeitet:

ARadauer

Top Contributor
@dicke_nudel: wtf! sorry wenn du nicht mal eine schleife lesen kannst, wirst du mit java nicht weiter kommen.
wozu machst du das? ist das für die arbeit, studium oder schule?
arbeit: kündigen!
studium: exmatrikulieren!
schule: abschreiben!
 

Shoox

Mitglied
Ich würde hier ein 2 dimensionales Array verwenden:
Lies zuerst alles in das String[][] ein:
Java:
String[][] table = new String[tabelle1.get(0).length][tabelle1.size()];
for (int i = 0; i < tabelle1.size(); i++) {
   String[] line = tabelle1.get(i);
   for (int j = 0; j < line.length; j++) {
      table[j][i] = line[j];
   }
}
Erklärung:

Nehmen wir an dein CSV sieht so aus:
a,b,c
1,2,3
4,5,6

1. Durchlauf (1. CSV Zeile):
[0][0]=a
[1][0]=b
[2][0]=c

2. Durchlauf:
[0][1]=1
[1][1]=2
[2][1]=3

3. Durchlauf:
[0][2]=4
[1][2]=5
[2][2]=6

Ergebnis:
a,1,4
b,2,5
c,3,6

und dann kannst du wiederrum mit einer Schleife pro Spalte deine Werte rausholen.
Java:
for (int i = 0; i < table.length; i++) {
   String[] values = table[i];
}
Das Ergebnis aus dieser for-Schleife sieht dann so aus:
1. Durchgang
values = {"a","1","4"};
2. Durchgang
values = {"b","2","5"};
3. Durchgang
values = {"c","3","6"};

Ist zwar jetzt eine komplett andere Lösung als du wolltest, aber es ist zumindest eine Lösung ^^ Hoffentlich ist es nicht zu kompliziert :p
 
Zuletzt bearbeitet:

dicke_nudel

Mitglied
Daran habe ich auch schon gedacht. Leider kann ich so keine Duplikate verhindern. Jedenfalls müsste ich eine neue Schleife schreiben die wieder durch alles druchgeht und Prüft. Bei einer 38 x 32000 Matrix darf ich das dann teuer bezahlen. Daher meine Idee mit einem TreeSet zu arbeiten. Ich brauchs ja Sortiert ohne Duplikate.
 
Zuletzt bearbeitet von einem Moderator:

Shoox

Mitglied
Was darf nicht doppelt vorkommen?
Werte allgemein?
Werte in einer Spalte?
Spaltennamen?
Dürfen in verschiedenen Spalten gleiche Werte drin sein?
oder dürfen Spalten nur insgesamt nicht ident sein?
 

dicke_nudel

Mitglied
Was darf nicht doppelt vorkommen?
Werte allgemein?
Werte in einer Spalte?
Spaltennamen?
Dürfen in verschiedenen Spalten gleiche Werte drin sein?
oder dürfen Spalten nur insgesamt nicht ident sein?

Mir sind nur die Werte in den jeweiligen Spalten wichtig.
Sollte in verschiedenen Spalten gleiche Werte drin sein ist das ok.

Also:

S1 S2
1 13
2 1
2 1
3 2



Dann brauch ich :

S1 S2
1 1
2 2
3 13
 
Zuletzt bearbeitet:

Shoox

Mitglied
Java:
TreeSet<String> ss = new TreeSet<String>();
HashMap<String, TreeSet<String>> hm = new HashMap<String, TreeSet<String>>();
String[] keys = tabelle1.get(0);
for (String key : keys){
   hm.put(key, ss);
   ss = new TreeSet<String>();      
}
for (int i = 1; i < tabelle1.size(); i++) {
   String[] values = tabelle1.get(i);
   for (int j = 0; j < values.length; j++){
      TreeSet<String> tmp = hm.get(keys[j]);
      tmp.add(values[j]);
      hm.put(keys[j], tmp);
   }
}

Hat grad wieder kurz Zeit, das dürfte jetzt passen.
In der HashMap sind nun alle Spalten mit get(Spaltennamen) abbrufbar, keine doppelten, sortiert und ich glaube (erfahrerne Programmierer wären gefragt :bae:) relativ performant.
Falls etwas unklar ist, fragen ist eines der wenigen Dinge die nichts kosten.
€: Außer bei Anwälten ...
 
Zuletzt bearbeitet:

dicke_nudel

Mitglied
Vielen Dank! Du hast mir meinen Tag gerettet. Ich studier das mal durch. Alles in allem glaube ich das es genau das ist was ich versucht habe zu basteln.


Alles klar. Vielen Dank nochmal.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Laufzeit/ O/Θ-Notation einer Treeset Methode Java Basics - Anfänger-Themen 0
M Problem beim Löschen des ersten Eintrags einer TreeSet Java Basics - Anfänger-Themen 3
B Objete von Polygon mit TreeSet verwalten Java Basics - Anfänger-Themen 1
N Einzelne Werte aus einem TreeSet auslesen Java Basics - Anfänger-Themen 2
R TreeSet Zugriff aus anderer Klasse Java Basics - Anfänger-Themen 8
J Klassen HashSet, TreeSet: unregelmäßige Zahlenreihen beim Befüllen Java Basics - Anfänger-Themen 7
J Objecte in TreeSet einfügen klappt nicht Java Basics - Anfänger-Themen 5
J TreeSet mit compareTo sortieren Java Basics - Anfänger-Themen 2
W Add zu TreeSet Probleme Java Basics - Anfänger-Themen 6
T TreeSet sortiert in ein anderes kopieren Java Basics - Anfänger-Themen 2
Todesbote Treeset - Wenn bestimmtes Objekt vorkommt Counter erhöhen Java Basics - Anfänger-Themen 6
Todesbote Map<String, Treeset> aus Treeset bestimmten Wert auslesen Java Basics - Anfänger-Themen 4
A Treeset per For-Schleife durchlaufen Java Basics - Anfänger-Themen 2
U TreeSet und Komparatoren Java Basics - Anfänger-Themen 6
B Object "Method" in TreeSet, Fehler beim Vergleichen/Comparable Java Basics - Anfänger-Themen 9
B Lotto mittels TreeSet Java Basics - Anfänger-Themen 3
M Treeset sortieren und ausgeben Java Basics - Anfänger-Themen 17
K TreeSet Sortieren Java Basics - Anfänger-Themen 6
E TreeSet Element löschen Java Basics - Anfänger-Themen 9
T treeSet durchsuchen Java Basics - Anfänger-Themen 2
R Sortieren TreeSet Java Basics - Anfänger-Themen 2
G HashSet vs. TreeSet Java Basics - Anfänger-Themen 3
J TreeSet methode Remove Java Basics - Anfänger-Themen 13
M TreeSet sortieren Java Basics - Anfänger-Themen 13
C Maximal-Anzahl von Objekten in TreeSet Java Basics - Anfänger-Themen 7
S TreeSet und StringTokenizer Java Basics - Anfänger-Themen 6
M Ausgabe einer ArrayList ensteht nur als Hashcode, nicht als Objekt Java Basics - Anfänger-Themen 16
D 2 ArrayListen gleich sortieren bzw. eine Liste anhand einer anderen Sortieren Java Basics - Anfänger-Themen 6
ixChronos Letzten 4 Ziffern einer großen Zahl ausgeben Java Basics - Anfänger-Themen 3
P Objekt einer Methode eines anderen Objektes übergeben Java Basics - Anfänger-Themen 5
L Variablenwerte aus einer Methode übergeben Java Basics - Anfänger-Themen 2
E Arrays in einer ArrayList miteinander vergleichen Java Basics - Anfänger-Themen 12
Simon16 Java ArrayListe von einer Klasse sortieren Java Basics - Anfänger-Themen 2
Shadowrunner Variablen Gibt es eine Möglichkeit die Ziffern/Stellen einer Zahl fest zu legen? Java Basics - Anfänger-Themen 3
D remove Object von einer Liste von Obejcts Java Basics - Anfänger-Themen 3
FunkyPhil94 Wert in einer Lambda Funktion erhöhen Java Basics - Anfänger-Themen 3
T Aufruf der Methode einer Oberklasse, wenn sie in der Unterklasse überschrieben ist. Polymorphie. Java Basics - Anfänger-Themen 2
B Kommunikation mit Seriellen Schnittstellen + Integration einer lib Java Basics - Anfänger-Themen 1
A Daten aus einer HashMap aus einer DB speichern und mit neuen Werten vergleichen Java Basics - Anfänger-Themen 8
P Welches SDK für das erstellen einer ausführbaren Datei? Java Basics - Anfänger-Themen 4
D Länge einer Liste aufrufen. Java Basics - Anfänger-Themen 19
J Klassen Instanzen einer Klasse in einer anderen unabhängigen Klasse nutzen Java Basics - Anfänger-Themen 4
B Alle Strings bis zu einer Maimallänge aufzählen, die Bedingung erfüllen Java Basics - Anfänger-Themen 13
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
Soranix Erste Schritte Struktur als Anfänger // Von einer Klasse auf ein Objekt einer anderen Klasse zugreifen. Java Basics - Anfänger-Themen 6
MoxMorris Wie macht man String[] = String[] aus einer anderer Methode? Java Basics - Anfänger-Themen 18
T Fibonacci mit einer Hilfsmethode berechnen Java Basics - Anfänger-Themen 10
S Hilfe zu einer Aufgabe Java Basics - Anfänger-Themen 5
M Radius von einer ellipse bestimmen Java Basics - Anfänger-Themen 7
Say Fehlenden Code finden in einer while-Schleife? Java Basics - Anfänger-Themen 11
M Zufallszahl generieren mit einer linken und rechten Grenze Java Basics - Anfänger-Themen 3
N Was Passiert mit dem Namen einer Variable, wenn man diese einer Liste Hinzufügt Java Basics - Anfänger-Themen 16
_user_q Wie eine Methode/Funktion aus einer Klasse mit Constructor aufrufen? Java Basics - Anfänger-Themen 20
W String einer Textdatei in einzelne Stringobjekte pro Zeile aufteilen Java Basics - Anfänger-Themen 14
W Objekte einer ArrayList in txt-datei schreiben mit Paths? Java Basics - Anfänger-Themen 2
S Best Practice Fragen zu Projektstruktur einer Datenbank-Abfrage-App (MVC) Java Basics - Anfänger-Themen 13
T Variable von Objekten in einer Methode überprüfen Java Basics - Anfänger-Themen 26
nelsonmandela Problem bei Ausgabe einer Switch - Case Funktion Java Basics - Anfänger-Themen 5
S Textausgabe in einer For-Schleife Java Basics - Anfänger-Themen 12
M Spezifischen Wert einer Zeile aus .txt Datei entnehmen Java Basics - Anfänger-Themen 15
B Popups mit Klicksabfangen zumAusfüllen einer .ods Datei Java Basics - Anfänger-Themen 0
M RandomAccessFile int und String gleichzeitig in einer Datei Java Basics - Anfänger-Themen 49
E Suchfunktion in einer Liste Java Basics - Anfänger-Themen 39
T ungeordnete Werte-Paare in einer Liste Java Basics - Anfänger-Themen 7
FireHorses Einen Command erst nach einer Chateingabe aktivieren Java Basics - Anfänger-Themen 1
frager2345 Singleton-Muster Java ->Nur eine Instanz einer Klasse erzeugen können Java Basics - Anfänger-Themen 45
F wie kann ich die Position des letzten Vokals innerhalb einer Zeichenkette ermitteln? Java Basics - Anfänger-Themen 5
H Kapselung protected aber in einer Kindklasse nicht zugänglich Java Basics - Anfänger-Themen 5
R Methoden Werte einer ArrayList als Parameter übergeben. Java Basics - Anfänger-Themen 4
B Den Dateipfad einer Java Datei durch Code in Selbiger finden? Java Basics - Anfänger-Themen 10
LilliCherry Array in einer Zeile ausgeben Java Basics - Anfänger-Themen 6
B Attribute eines Objekts einer Klasse durch statische Methode einer 2. Klasse ändern? Java Basics - Anfänger-Themen 32
L Dauerhaftes Speichern einer Eingabe bei einer ArrayList Java Basics - Anfänger-Themen 26
V Hilfe bei Implementierung einer boolean Methode Java Basics - Anfänger-Themen 6
G Position einer unbekannten 3-stelligen-Zahl in einem String finden Java Basics - Anfänger-Themen 15
stormyark Fehler beim überschreiben einer Variable Java Basics - Anfänger-Themen 1
H Kompliziertes Sortieren einer ArrayList mit Objekten(Sortieren nach X und Y) Java Basics - Anfänger-Themen 11
T Permanentes speichern von Objekten in einer ArrayList Java Basics - Anfänger-Themen 6
Saiko Zeilen einer Datei einlesen Java Basics - Anfänger-Themen 3
H Erste Schritte Nach einer Zahl n soll n Mal der String untereinander ausgegeben werden Java Basics - Anfänger-Themen 3
G zwei Instanzen einer Klasse Java Basics - Anfänger-Themen 29
sserio Prüfziffer einer ISBN Nummer herrausfinden. Java Basics - Anfänger-Themen 14
J Benennung einer mir unbekannten Java - Ausdrucksweise Java Basics - Anfänger-Themen 5
LFB In einer For-Schleife alles in einer Zeile ausgeben Java Basics - Anfänger-Themen 14
sserio Wie kann man nach einer Klasse fragen? Java Basics - Anfänger-Themen 12
berserkerdq2 Wann soll ich den Stream schließen, wenn ich das in einer Methode habe? Java Basics - Anfänger-Themen 8
berserkerdq2 Wie gebe ich den Pfad zu einer Datei an, die in einem Ordner in Eclipse ist? Java Basics - Anfänger-Themen 1
M Variable in einer Schleife initialisieren Java Basics - Anfänger-Themen 46
D EinMalEins mithilfe einer for-Schleife und Array Java Basics - Anfänger-Themen 1
J int innerhalb einer Datei ändern Java Basics - Anfänger-Themen 1
D Hilfe bei einer Aufgabe mit for-Schleife Java Basics - Anfänger-Themen 6
Neuling47 Ich zerbreche mit den kopf an einer Aufgabe Java Basics - Anfänger-Themen 61
H Mit setter-Methode JLabel in einer andern Klasse ändern. Java Basics - Anfänger-Themen 40
J Zelleninhalt einer Jtable löschen Java Basics - Anfänger-Themen 2
Robert_Klaus Hamster java Simulation Hilfe bei einer Aufgabe Java Basics - Anfänger-Themen 5
stormyark 4 Bit in einer for-schleife funktioniert nicht Java Basics - Anfänger-Themen 3
F Werte in einer Arraylist Zählen Java Basics - Anfänger-Themen 2
M ArrayList mit einer Schleife befüllen Java Basics - Anfänger-Themen 2
A Ein Array bearbeiten und in einer anderen Methode nutzen Java Basics - Anfänger-Themen 6
A Ergebnis einer Methode bei einer anderen verwenden Java Basics - Anfänger-Themen 13

Ähnliche Java Themen

Neue Themen


Oben