将列表或字符串与点分隔符转换为映射<字符串,对象>



正在寻找一个漂亮的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}}

最新更新