当两种类型不同时,如何将一个哈希映射的值放入另一个哈希映射

时间:2018-07-15 09:31:55

标签: java hashmap

地图1:-

Map<String, List<Long>> prjReleaseMap = (Map<String, List<Long>>) configMap.get(PROJECTRELEASEMAP);

地图2:-

Map<Long, List<Long>> newprjReleaseMap = new HashMap<>();

我想在地图2中放置地图1的值。

3 个答案:

答案 0 :(得分:1)

您可以循环浏览密钥集,然后隐藏密钥并将其放在新的Map上。但是,您需要确保所有键Strings实际上都在Long上,否则会出现异常。

    prjReleaseMap.keySet().forEach(e -> {
        newprjReleaseMap.put(Long.parseLong(e), prjReleaseMap.get(e));
    });

修改: 您可以先将List<Interger>转换为List<Long>,然后再将值放入新地图。请参考下面的代码。

    prjReleaseMap.keySet().forEach(e -> {
        newprjReleaseMap.put(Long.parseLong(e),
                prjReleaseMap.get(e).stream().map(i -> i.longValue()).collect(Collectors.toList()));
    });

如注释中所述,您可以直接在地图上进行迭代,而不必在键集上进行迭代。

    prjReleaseMap.forEach((k, v) -> {
        newprjReleaseMap.put(Long.parseLong(k), v.stream().map(i -> i.longValue()).collect(Collectors.toList()));
    });

答案 1 :(得分:1)

如果您使用的是Java 8,则可以使用:

Map<Long, List<Long>> newprjReleaseMap = prjReleaseMap.entrySet().stream()
        .collect(Collectors.toMap(k -> Long.parseLong(k.getKey()), Map.Entry::getValue));

我认为所有键都可以转换为Long。


如果您只想输入密钥有效的条目,则可以使用过滤器,如下所示:

Map<Long, List<Long>> newprjReleaseMap = prjReleaseMap.entrySet().stream()
        .filter(k -> checkKey(k.getKey()))
        .collect(Collectors.toMap(k -> Long.parseLong(k.getKey()), Map.Entry::getValue));

...

public static boolean checkKey(String value) {
    try {
        Long.parseLong(value);
        return true;
    } catch (NumberFormatException e) {
        return false;
    }
}

答案 2 :(得分:1)

如果您要做的只是构造一个新的Map<Long, List<Long>>,其中prjReleaseMap键将转换为long值并保持原来的值,那么就可以完成如下:

prjReleaseMap.forEach((k, v) -> newprjReleaseMap.put(Long.parseLong(k), v));

但是,如果newprjReleaseMap中可能已经有一些条目,并且您想将prjReleaseMap的条目合并到newprjReleaseMap中,则可以使用merge方法:

prjReleaseMap.forEach((k, v) -> newprjReleaseMap.merge(Long.parseLong(k), v, (o, n) -> o));

这假定prjReleaseMap的键是表示为long的{​​{1}}值。上面的String函数称为重映射函数,如果发生键冲突,则调用该函数来决定是保留旧值((o, n) -> o)还是新值(o)或调用另一个自定义函数来生成一个全新的值。