我有大约15个String变量,如下所示......
String jack = "blue, orange, green, purple";
String blue = "Yellow, red";
String yellow = "sky, wind, earth";
String orange = "char1, char2 , char3";
我正在尝试将String'Jack'添加到arrayList中。我正在使用split函数(拆分“'')将它们添加到arrayList。
我想要做的就是当我在插孔字符串中找到“蓝色”时,我必须在添加“橙色”之前将“黄色”和“红色”添加到arraylist等等。 / p>
我如何实现这一目标?非常感谢你的帮助。
答案 0 :(得分:1)
尝试将变量名称用作代码中逻辑的一部分几乎可以肯定地反映了设计问题。生成的代码将是脆弱的,难以阅读。除非您被迫使用该代码而不进行更改,否则我建议重构使用不同的方法:
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(", "));
答案 1 :(得分:0)
这种使用变量名称的行为称为反射。这可能不是你想要做的。
您可以将HashMap
初始化为(可能)达到您想要的效果:
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); }
}
}
您没有提及是否要以递归方式执行此操作(例如每当您点击颜色时,请使用该颜色的列表)。我没有这样实现它,但如果你需要它,你应该从堆栈中推送和弹出(类似于深度优先搜索)。