lamba表达式中的返回类型错误

时间:2017-05-25 01:52:23

标签: lambda java-8 java-stream

我使用给定代码获得以下编译错误 -

  

lamba表达式中的错误返回类型:Map<字符串,设置< PARAM>>能够   不能转换为Map<字符串,列表<地图<字符串,对象>>>

我根本没有线索为什么会出现这个错误。由于mapToReturn和dummyMap属于同一类型。

    Map<String, Set<Param>> mapToReturn = Optional.ofNullable(CACHE.get(content, (key) -> {
        hit.set(false);
        Map<String, List<Map<String, Object>>> rawMap = Paser.parse(Map.class, key);
        Map<String, Set<Param>>  dummyMap = new HashMap<>();

        for (Map.Entry<String, List<Map<String, Object>>> entry : rawMap.entrySet()) {
            dummyMap.put(entry.getKey(), entry.getValue()
                    .stream()
                    .map(this::mapToParam)
                    .collect(Collectors.toSet()));
        }

        return dummyMap;
    })).orElseThrow(() -> new ParamParserException("... "));

1 个答案:

答案 0 :(得分:1)

CACHE.get的签名肯定很重要,这就是您收到此错误的原因。我试图重现这个问题。考虑与您的问题相关的部分代码:

Map<String, Set<Param>> aMap = Optional.ofNullable(CACHE.get(content, (key) -> {
            //...
            Map<String, Set<Param>>  dummyMap = new HashMap<>();
            //...
            return dummyMap;
        })).orElseThrow(() -> new ParamParserException("... "));

如果CACHE.get的签名如下,则此代码将编译:

static class CACHE 
{
    static Map<String, Set<Param>> get(String content, Function<String, Map<String, Set<Param>>> func)
    {
        return ...;
    }
}

现在让我们改变签名:

static class CACHE
{
   static Map<String, Set<Param>> get(String content, Function<String, Map<String, List<Map<String, Object>>>> func)
    {
         return ...;
    }
 }

此操作失败,并显示以下错误:

  

lambda表达式Map<String,Set<Param>>中的错误返回类型不能   转换为Map<String,List<Map<String,Object>>>

这正是你得到的错误。 Paser.parse的签名不是原因,因为错误消息会有所不同。