使用点分隔符将 List 转换为 String 到 Map<String, Object>

Posted

技术标签:

【中文标题】使用点分隔符将 List 转换为 String 到 Map<String, Object>【英文标题】:convert List ot String with point separator to 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 所以任务是将带有分隔符的字符串转换为带有预定义值的映射。

【问题讨论】:

【参考方案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

【讨论】:

谢谢!为我工作非常非常好。

以上是关于使用点分隔符将 List 转换为 String 到 Map<String, Object>的主要内容,如果未能解决你的问题,请参考以下文章

将 List<String> 转换为分隔字符串 [重复]

通过 http 管道将逗号分隔的值转换为 list<string>

java中逗号分隔的字符串和List相互转换

逗号分隔的字符串与List互转

使用 java 8 流转换 List<Map<String,String>> 与“,”分隔的字符串值

CSV等类型文件与Map互相转换(Scala)