【问题标题】:convert List ot String with point separator to Map<String, Object>使用点分隔符将 List 转换为 String 到 Map<String, Object>
【发布时间】:2021-12-30 11:11:41
【问题描述】:

在 Java 上寻找一个漂亮的解决方案,这对我会有帮助。提前感谢您的任何建议。 有逗号分隔符的字符串列表:

"a.b.cc"
"a.dd"
"a.b.f.gg"
"u.ww"

我有每行最后一个元素的值

cc -> 1, dd -> 5, gg -> 8, ww ->60

因此我应该有 Map

这个结果我可以用 json 来描述:{"a":{"b":{"cc":1,"f":{"gg":8}}"dd":5}"u":60} 所以任务是将带有分隔符的字符串转换为带有预定义值的映射。

【问题讨论】:

    标签: java hashmap converters separator mapper


    【解决方案1】:

    试试这个。

    @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}}
    

    【讨论】:

    • 谢谢!为我工作非常非常好。
    猜你喜欢
    • 1970-01-01
    • 2015-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-22
    • 2013-05-24
    • 2014-01-29
    相关资源
    最近更新 更多