将Java Map Enum键转换为Map String键

jiv*_*key 5 java dictionary java-8

我有以下地图:

Map<DataFields, String> myMap;
Run Code Online (Sandbox Code Playgroud)

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

Map<String, String> myMap;
Run Code Online (Sandbox Code Playgroud)

我最好的微弱尝试,甚至没有编译是:

myMap.keySet().stream().map(k -> k.name()).collect(Collectors.toMap(k, v)
Run Code Online (Sandbox Code Playgroud)

Mur*_*nik 7

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

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

  • `e - > e.getValue()`用`Entry :: getValue`替换 (3认同)
  • @AdeshKumar 一个 lambda 表达式将创建一个更多的合成方法,而方法引用不会,这是唯一的区别(除了可读性) (2认同)