java - Collectors toMap() - 从 Map.Entry 到 Map 结构的值映射器

标签 java java-11 collectors

我最近偶然发现了以下问题。

基本上,我有一组我想将其转换为 map 的 map 。下面是代码片段:

Set<Map.Entry<String,String> > testSet = new HashSet<>(
            Arrays.asList(
                    entry("key1","value1"),
                    entry("key1","value1")
                    )
    );

    Map<String,Map<String,String>> testMap = testSet
            .stream()
            .collect(
                    Collectors.toMap(
                            entry -> entry.getKey(),
                            entry-> {
                                Map.ofEntries(
                                        entry(entry.getKey(),entry.getValue() + "2")
                                );
                            }
                    )
            );

上面的代码片段无法编译,因为传递给 toMap 的函数需要对象而不是 Map.Entry 对象,因此编译器无法找到特定于 Map.Entry 的方法。

我不知道为什么会发生这种情况,因此非常感谢您的帮助。

最佳答案

应该是:

Map<String,Map<String,String>> testMap = testSet
        .stream()
        .collect(
                Collectors.toMap(
                        entry -> entry.getKey(),
                        entry -> Map.ofEntries(entry(entry.getKey(),entry.getValue() + "2"))
                )
        );

当您使用带有大括号的 lambda 表达式主体时,它必须包含 return 语句(假设相应的功能接口(interface)的方法有返回值)。

如果 lambda 表达式的主体只是单个表达式,则不必将其括在大括号中。

关于java - Collectors toMap() - 从 Map.Entry 到 Map 结构的值映射器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58953539/

相关文章:

java - JComboBox 从所选项目中的多个变量中获取变量

java - 解析文本以查找地理名称

java - Collectors.toList() 中 LongStream VS Stream 的区别

Java8 : Using an IntStream as a Supplier parameter for custom Collector

java - Android HttpPost 消息不会通过线路发送其有效负载

java - 当任何一个在浏览器中键入时,如何使键盘输入按钮显示 “Search”,否则它会像往常一样用作 Enter?

java - 无法从 Fedora 30 中删除 java-11-amazon-corretto-devel

ssl - 由于 OpenJDK Java 11 得到 javax.net.ssl.SSLHandshakeException : Received fatal alert: handshake_failure

Java 11 谓词 lambda 表达式泛型类型 ClassCastException

java - 收集 HashMap<String, List<String>> java 8