HashMap.keySet().toArray()

ah, ist ok! musste natürlich erst einbinden, sorry!
so komme ich also schonmal an die werte wieder ran von der hashmap... das eigentliche problem ist aber folgendes: ich brauche jedwede kombination der String[]-werte...
nehmen wir mal folgendes beispie als input-text:
generic data = 1,2,3
generic test = a,b
generic rums = 13,14

ich brauche eine ausgabe wie:
data=1, test=a, rums=13
data=1, test=a, rums=14
data=1, test=b, rums=13
data=1, test=b, rums=14
and so on...
:(( geht sowas? jede kombination?
 
Zuletzt bearbeitet:
Ich weiß zwar nicht, was du genau vorhast, allerdings könnte man so etwas mit 3 String-Arrays bewerkstelligen:

Java:
public class CombineExample {
	public static void main(String[] args) {
		String[] data = {"1", "2", "3"};
		String[] test = {"a", "b"};
		String[] rums = {"13", "14"};

		for(String dataVal : data) {
			for(String testVal : test) {
				for(String rumsVal : rums) {
					System.out.println("data=" + dataVal + ", test=" + testVal + ", rums=" + rumsVal);
				}
			}
		}
	}
}

Oder, du sagst uns, was du eigentlich vorhast, vielleicht gibt es noch elegantere Lösungen dafür ;)

Viele Grüße,
MAN
 
ja, mit nem 3fach-loop... aber: ich weiss nicht, wieviele keys ich habe. können auch 5 sein. aber for-schleifen kann man ja schlecht generieren ;) ich muss ein programm mit parametern aufrufen. die parameter sind genau die keys und die werte der keys verändern entsprechend die ausgabe des programms. ich brauche aber jede ausgabe, die sich aus den verschiedenen werten der keys ergibt.
 
Jetzt habe ich dich verstanden ;)

Nach "kurzem" überlegen, ist mir folgender Code so in den Sinn gekommen (Thema Rekursion):

Java:
// --- Klasse IterateExample.java ---

public class IterateExample {
	public static void main(final String[] args) {
		final Generic[] metadata = new Generic[] {
			new Generic("data", new String[]{"1", "2", "3"}),
			new Generic("test", new String[]{"a", "b"}),
			new Generic("rums", new String[]{"13", "14"})
		};

		Generic.printAll(metadata, metadata.length, "");
	}
}

// --- Klasse Generic.java ---

import java.util.Arrays;

public class Generic {
	private final String name;
	private final String[] values;

	public Generic(final String name, final String[] values) {
		this.name = name;
		this.values = values;
	}

	public String getName() {
		return name;
	}

	public String[] getValues() {
		return values;
	}

	public static void printAll(final Generic[] values, final int count, final String out) {
		int i = 0;

		for(final Generic generic : values) {
			i++;

			for(final String val : generic.getValues()) {
				if(values.length > 1) {
					printAll(Arrays.copyOfRange(values, i, values.length), count - 1, out + generic.getName() + "=" + val + ", ");
				} else if(count == 1) {
					System.out.println(out + generic.getName() + "=" + val);
				}
			}
		}
	}
}

Vielleicht nicht die schönste und durchdachsteste Lösung, aber eine Lösung ;)

Ich denke glaube ich selbst gerade etwas zu kompliziert....oder? ;)

Viele Grüße,
MAN
 
ehh... was genau macht der code? ;)

wieso sind das denn 2 klassen? geht das auch alles in einer klasse?
aber es funktioniert, danke! jetzt müsste ich nur noch meine textdatei irgendwie in das generic bekommen. wie geht das? bei der hashmap hab ich ja einfach nur die beiden teile mit einem put in die hashmap geladen. wie füge ich dynamisch neue werte in den anderen datentyp ein?
 
so, also code ist nun folgender:
Java:
if (splitarray[0].startsWith("generic")){
					String[] subsplit1 = splitarray[0].split("\\s+");
					splitarray[0] = subsplit1[1];
				
				
					// wenn mehrere werte pro generic, muessen wir die separieren!
					String[] subsplit2 = splitarray[1].split("\\,");
					//splitarray[1] = subsplit2;
					for (int index=0; index<subsplit2.length; index++){
							System.out.println(splitarray[0] + " " + subsplit2[index]);
					}
					// fill our hashmap with the wanted data...
					//metadata.put(splitarray[0], subsplit2);
					
					Generic[] metadata1 = new Generic[] {
						new Generic(splitarray[0], subsplit2)
					};
					Generic.printAll(metadata1, metadata1.length, "");
				//}
				}

das geht dann natürlich nicht. ich müsste ja erstmal metadata1 komplett füllen...
 
Probiers mal mit folgendem:
Java:
		final ArrayList<Generic> metadata = new ArrayList<Generic>();
		...
		while(...) {
			...
			metadata.add(new Generic(splitarray[0], subsplit2));
			...
		}
		...
		Generic.printAll(metadata.toArray(new Generic[]{}), metadata.size(), "");
So könntest du beispielsweise die ArrayList dynamisch füllen und dann ausgeben lassen.

Viele Grüße,
MAN
 
Zuletzt bearbeitet:
Zurück