将Java Map Enum键转换为Map String键

时间:2018-02-27 18:38:09

标签: java dictionary java-8

我有以下地图:

$identifier

但我需要将其转换为以下内容:

Map<DataFields, String> myMap;

我最好的微弱尝试甚至无法编译:

Map<String, String> myMap;

4 个答案:

答案 0 :(得分:6)

您需要流式传输entrySet()(因此您拥有密钥和值),并将它们收集到地图中:

Map<String, String> result =
    myMap.entrySet()
         .stream()
         .collect(Collectors.toMap(e -> e.getKey().name(), e -> e.getValue()));

答案 1 :(得分:2)

Map<String, String> result = myMap
    .entrySet() // iterate over all entries (object with tow fields: key and value)
    .stream() // create a stream
    .collect(Collectors.toMap(e -> e.getKey().toString(), e -> e.getValue()));
        // collect to map: convert enum Key value toString() and copy entry value

答案 2 :(得分:2)

在没有Collectors帮助器的情况下执行相同操作的另一种方法。使用entryset可以很容易地进行映射。

  map.entrySet()
                .stream()
                .collect(
                        () -> new HashMap<String, String>(),
                        (Map newMap, Map.Entry<DataFields, String> entry) -> {
                            newMap.put(entry.getKey().name(), entry.getValue());
                        }
                        ,
                        (Map map1, Map map2) -> {
                            map.putAll(map2);
                        }
                );

答案 3 :(得分:2)

Java 8,一种简单的方法(没有流):

Map<String, String> result = new HashMap<>();
myMap.forEach((k, v) -> result.put(k.name(), v));