Java 8 替代 Map.entry() 将值映射到新 Map?

Luc*_*uca 4 java lambda java-8 java-stream

我找到了长期以来一直试图解决的问题的解决方案。\n不幸的是,我无法使用该解决方案,因为目标 java 版本是 Java 8。

\n\n
Map<List<String>, String> map = new HashMap<>();\n    map.put(List.of("Los Angeles", "New York", "Chicago"), "USA");\n    map.put(List.of("Toronto", "Vancover", "Montr\xc3\xa9al"), "Canada");\n\n    Map<String, String> newMap = map.entrySet()\n        .stream()\n        .flatMap(entry -> entry.getKey()\n            .stream()\n            .map(city -> Map.entry(city, entry.getValue())))\n        .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)));\n
Run Code Online (Sandbox Code Playgroud)\n\n

这会返回给我一个像这样的地图:{New York=USA, Chicago=USA, Los Angeles=USA, Toronto=Canada}

\n\n

现在我的问题是,在 Java 8 中不使用 Map.entry(...) 是否可以得到这个结果?

\n

Era*_*ran 8

您可以使用

.map(city -> new AbstractMap.SimpleEntry<>(city, entry.getValue())))
Run Code Online (Sandbox Code Playgroud)

  • 就功能而言,更接近“Map.entry(…)”的是“SimpleImmutableEntry”,甚至“new AbstractMap.SimpleImmutableEntry&lt;&gt;(Objects.requireNonNull(city), Objects.requireNonNull(entry.getValue()))”。但如果只考虑简洁性,“SimpleEntry”显然更接近…… (6认同)