正在寻找一个漂亮的Java解决方案,这对我很有帮助。提前感谢您的建议。有带逗号分隔符的字符串列表:
"a.b.cc"
"a.dd"
"a.b.f.gg"
"u.ww"
并且我有每行中最后元素的值
cc -> 1, dd -> 5, gg -> 8, ww ->60
因此,我应该具有Map<Sting,Object>
这个结果我可以用json:{"a":{"b":{"cc":1,"f":{"gg":8}}"dd":5}"u":60}
来描述因此,任务是将带有分隔符的字符串转换为具有预定义值的映射。
试试这个。
@SuppressWarnings("unchecked")
static Map<String, Object> convert(List<String> list, Map<String, Integer> map) {
Map<String, Object> result = new TreeMap<>();
for (String s : list) {
String[] f = s.split("\.");
Map<String, Object> t = result;
int i = 0;
for (int m = f.length - 1; i < m; ++i)
t = (Map<String, Object>)t.computeIfAbsent(
f[i], k -> new TreeMap<>());
t.put(f[i], map.get(f[i]));
}
return result;
}
public static void main(String[] args) {
List<String> list = List.of(
"a.b.cc",
"a.dd",
"a.b.f.gg",
"u.ww");
Map<String, Integer> map = Map.of(
"cc", 1, "dd", 5, "gg", 8, "ww", 60);
Map<String, Object> result = convert(list, map);
System.out.println(result);
}
输出:
{a={b={cc=1, f={gg=8}}, dd=5}, u={ww=60}}