2016-08-09 58 views
-2

ich um 15 String Variablen wie folgt ...Java Looping gibt

String jack = "blue, orange, green, purple"; 

String blue = "Yellow, red"; 

String yellow = "sky, wind, earth"; 

String orange = "char1, char2 , char3"; 

Ich versuche, den String 'Jack' in eine Arraylist hinzuzufügen. Ich benutze Split-Funktion (um auf die "'') zu teilen, um sie zu einem ArrayList hinzuzufügen.

Alles, was ich versuche zu tun ist, wenn ich auf die" blaue "in der Buchse String komme, muss ich hinzufügen die „Gelb“ und „Rot“ auf die Arraylist, bevor ich „orange“ hinzufügen und so weiter.

Wie ich das tun erreichen? vielen dank für Ihre Hilfe.

+2

Bitte lesen Sie die folgenden Artikel, wie eine Frage auf dieser Seite stellen: http://stackoverflow.com/ Hilfe/wie man fragt. Zumindest müssen wir Ihnen Ihren Code zeigen und uns sagen, was genau falsch läuft. –

Antwort

0

Dieser Akt der den Variablennamen verwendet, ist "Reflection." Dies ist wahrscheinlich nicht, was Sie tun möchten.

Sie können eine HashMap initialisieren (wahrscheinlich) erreichen, was Sie wollen:

Map<String, List<String>> map = new HashMap<String, List<String>>(); 
map.put("jack", Array.asList("blue", "orange", "green", "purple")); 
map.put("blue", Array.asList("yellow", "red")); 
map.put("yellow", Array.asList("sky", "wind", "earth")); 
map.put("orange", Array.asList("char1", "char2", "char3")); 

List<String> results = new ArrayList<String>(); 
for (String s : map.get("jack")) { 
    if (map.get(s) != null) { 
     for (String s2 : map.get(s)) { results.add(s2); } 
    }  
} 

Sie haben nicht erwähnt, ob Sie rekursiv arbeiten möchten (z. B. wann immer Sie eine Farbe treffen, verwenden Sie die Liste dieser Farbe). Ich habe es nicht als solches implementiert, aber wenn Sie es brauchen, sollten Sie von einem Stapel pushen und abspringen (ähnlich wie bei einer Tiefensuche).

+1

ein Off-Topic-Kommentar: In diesem Fall ist es besser, 'Array.asList (" blau "," orange ")' anstelle des anonymen Klassen-mit-Initialisierungs-Tricks zu verwenden (new ArrayList <>() {{ add (...); füge (...)}} ') hinzu, um die Lesbarkeit zu verbessern. –

+0

@AdrianShum Danke, ich werde es ändern, um das zu verwenden. Viel schöner! – sdasdadas

1

Der Versuch, den Namen einer Variablen als Teil der Logik in Ihrem Code zu verwenden, spiegelt fast sicher ein Designproblem wider. Der resultierende Code wird fragil und schwer zu lesen sein. Es sei denn, Sie ohne Änderungen gezwungen sind, diesen Code zu verwenden, dann würde ich vorschlagen, Refactoring einen anderen Ansatz zu verwenden:

Map<String, List<String>> colours = new HashMap<>(); 
colours.put("blue", Arrays.asList("yellow", "red")); 
colours.put("yellow", Arrays.asList("sky", "wind", "earth")); 
colours.put("orange", Arrays.asList("char1", "char2", "char3")); 

String result = Arrays.stream(jack.split(", ")) 
    .map(str -> colours.getOrDefault(str, str)) 
    .collect(Collectors.joining(", "));