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

标签 java lambda java-8 java-stream

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

Map<List<String>, String> map = new HashMap<>();
    map.put(List.of("Los Angeles", "New York", "Chicago"), "USA");
    map.put(List.of("Toronto", "Vancover", "Montréal"), "Canada");

    Map<String, String> newMap = map.entrySet()
        .stream()
        .flatMap(entry -> entry.getKey()
            .stream()
            .map(city -> Map.entry(city, entry.getValue())))
        .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)));

这将返回一个类似以下的 map :{New York=USA, Chicago=USA, Los Angeles=USA, Toronto=Canada}

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

最佳答案

你可以使用

.map(city -> new AbstractMap.SimpleEntry<>(city, entry.getValue())))

关于Java 8 替代 Map.entry() 将值映射到新 Map?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60316828/

相关文章:

java - Docx4j - 文档中的图像

c# - 多个左外连接与 lambda 表达式

java - 如何在 Stream.collect 中为 HashMap 使用双冒号?

java - 将列表映射到 map 中的 DTO - java

java - 使用 Java 8 功能在列表中搜索非空列表

java - 如何计算(并指定)java进程允许的总内存空间?

java - 在Java中更改导入名称,或导入两个同名的类

java - 更改jdk版本的问题

c# - 使用 Action 和 Lambda 进行 NUnit 测试

java - 从 List<Foo> 到 Map<String, List<Foo>> : looking for a better implementation