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



  • Hallo an alle. Ich geh gerade Fremd und versuche mich in JAVA statt C++.
    Mein Problem ist das ich nich verstehe wie ich die List<String[]> in ein TreeSet<String[]> bekomme. Siehe Zeile 11 bis 18.

    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();
    
    	String[] arr= new String[]{};
    
    		for(int x=0;x>tabelle1.lastIndexOf(tabelle1);x++)
    		{
            arr[x]= tabelle1.toArray().toString();
    
    			//variant.add(arr); 
    		}
    
    	Iterator<String[]> iter;
    	iter = variant.iterator();
    
    	while(iter.hasNext())
    	{
    		System.out.print(iter.next());
    		System.out.print("\n");
    	}
    
    	return 0;
    }
    


  • wenn ich die frage richtig verstanden hab:
    zb. über den konstruktor - new TreeSet<String[]>(tabelle1);
    oder über .addAll(tabelle1)



  • Was genau willst du denn erreichen? Vor allem die for-Schleife ergibt für mich absolut keinen Sinn.

    String[] implementiert nicht Comparable, was Vorraussetzung für ein TreeSet ist. Also solltest du auf HashSet umsteigen.



  • Dasd schrieb:

    Was genau willst du denn erreichen? Vor allem die for-Schleife ergibt für mich absolut keinen Sinn.

    String[] implementiert nicht Comparable, was Vorraussetzung für ein TreeSet ist. Also solltest du auf HashSet umsteigen.

    hm, er könnte ja noch einen comparator dazubasteln und übergeben - dann halt noch per addAll die daten hinzufügen



  • Ich wollte ein TreeSet<String[]> verwenden weil ich für jede Spalte aus einer CSV festhalten muss welche Werte vorkommen. Ohne Duplikate. Sortiert.

    Stört euch nicht an der Schleife. Die ist definitiv falsch.



  • Dasd schrieb:

    Was genau willst du denn erreichen? Vor allem die for-Schleife ergibt für mich absolut keinen Sinn.

    String[] implementiert nicht Comparable, was Vorraussetzung für ein TreeSet ist. Also solltest du auf HashSet umsteigen.

    In der List<String> steht eine CSV. Also eine Tabelle. Ich will nun für jede Spalte festhalten welche Werte vorkommen. Sortiert und ohne Duplikate. Daher muss es ein Set sein.



  • Ist es dann nicht sinvoller, für jede Spalte ein TreeSet anzulegen? Sonst hast du ja nur voneinander verschiedene Zeilen in dem Set.



  • Dasd schrieb:

    Ist es dann nicht sinvoller, für jede Spalte ein TreeSet anzulegen? Sonst hast du ja nur voneinander verschiedene Zeilen in dem Set.

    Kannst du mir ein Snippet schreiben ? Bitte.



  • annahme: diese String[] sind zeilen?

    Set[] spalten = ... 
    
    for (String[] zeile : tabelle) {
      for (int i; ...) {
        spalten[i].add(zeile[i]);
      }
    }
    

    tabelle ist diese List<String[]> ding
    zeile ist eben eine zeile aus der tabelle
    spalten, jede spalte ist ein set

    weiß nicht ob das richtig ist oder hilft. kann auch sein das ich nicht verstanden habe was du eigentlich willst 🤡



  • 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);
       }
    }
    

    Das ist die Lösung 🙂
    Habe das aus nem anderen Forum. Vielen Dank an Shoox. 🙂


Anmelden zum Antworten