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

Collectors toMap() - value mapper from Map.Entry to Map structure

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

基本上我有一组要转换为地图的地图对。下面是代码片段:

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语句(假设相应的功能接口的方法有一个return值)。

如果 lambda 表达式的主体只是一个表达式,则不必用大括号括起来。