Java中的列表操作和转换

efzxgjgh  于 2023-02-18  发布在  Java
关注(0)|答案(1)|浏览(111)

我有一个输入列表,如下所示:
var list = Arrays.asList("etc->hosts", "etc->dockers->ssl->certs", "root");
我正在尝试将其转换为嵌套Map:
{etc={dockers={ssl={certs={}}}, hosts={}}, root={}}
我试着用点从输入列表中分割键,例如'-〉',并试着迭代来构造一个Map:Map〈字符串,Map〉。
已尝试.groupingBy().computeIfAbsent().stream().map().filter().collect(),但均失败。

sycxhyv7

sycxhyv71#

你不需要流,只需要一个简单的for循环遍历每个链:

Map<String, Object> map = new HashMap<>();
for (String chain : list) {
    Map<String, Object> current = map;
    for (String node : chain.split("->")) {
        current = (Map<String, Object>)current.computeIfAbsent(node, n -> new HashMap<>());
    }
}

如果你想避免未检查的强制转换警告,你可以定义一个自引用Map,如下所示(假设你不打算混合其他值类型):

class NestingMap extends HashMap<String, NestingMap> {}

Ideone Demo

相关问题