Lambda lamba表达式中的返回类型错误
我在给定代码中遇到以下编译错误- lamba表达式中的返回类型错误:MapLambda lamba表达式中的返回类型错误,lambda,java-8,java-stream,Lambda,Java 8,Java Stream,我在给定代码中遇到以下编译错误- lamba表达式中的返回类型错误:Map可以 不能转换为Map{ hit.set(false); Map rawMap=Paser.parse(Map.class,key); Map dummymmap=newhashmap(); 对于(Map.Entry:rawMap.entrySet()){ dummyMap.put(entry.getKey(),entry.getValue()) .stream() .map(this::mapToParam) .coll
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("... "));
Map-mapToReturn=Optional.ofNullable(CACHE.get(content,(key)->{
hit.set(false);
Map rawMap=Paser.parse(Map.class,key);
Map dummymmap=newhashmap();
对于(Map.Entry:rawMap.entrySet()){
dummyMap.put(entry.getKey(),entry.getValue())
.stream()
.map(this::mapToParam)
.collect(Collectors.toSet());
}
返回dummyMap;
})).orelsetrow(()->新的paramParseRexException(“…”);
缓存的签名。get当然很重要,这就是您出现此错误的原因。我试图重现这个问题。考虑与你的问题有关的部分代码:
Map<String, Set<Param>> aMap = Optional.ofNullable(CACHE.get(content, (key) -> {
//...
Map<String, Set<Param>> dummyMap = new HashMap<>();
//...
return dummyMap;
})).orElseThrow(() -> new ParamParserException("... "));
现在让我们更改签名:
static class CACHE
{
static Map<String, Set<Param>> get(String content, Function<String, Map<String, List<Map<String, Object>>>> func)
{
return ...;
}
}
静态类缓存
{
静态映射获取(字符串内容,函数func)
{
返回。。。;
}
}
此操作失败,出现以下错误:
lambda表达式Map
中的返回类型不正确,无法删除
转换为Map
这正是你得到的错误。
Paser.parse的签名不是原因,因为错误消息会有所不同。Param
==参数
?是。更正了。抱歉,这是一个输入错误,CACHE.get
和Paser.parse
的方法签名是什么,以及内容的类型是什么?还有,你拼错了“Parser”。@Douglas。。CACHE.get和Parser.parse的签名实际上并不重要。我已经更改了代码以删除它们,我相当确定它们确实很重要,这也是您出现问题的原因。否则我就不会问了。请添加它们。如果您以证明我错的方式更改了本地代码,请发布新代码。我不确定Parser.parse
是否无关。它可能涉及到一系列泛型推理。当然,Parser.parse
是相关的。但是,如果其签名有问题,则错误消息将不同。OP引用的错误与lambda的返回类型有关,这意味着编译器抱怨dummyMap
解析器。即使如此,parse
也可能是问题的一部分。我怀疑CACHE.get
和Parser.parse
都是泛型的,一般推断来自rawMap
->解析器的推断签名的类型。解析->key
->缓存的推断签名的推断类型。获取
->lambda->错误的推断预期返回类型,因为dummymemap
不匹配。否则,lambda的推断返回类型与rawMap
完全匹配似乎是一种巧合。
static class CACHE
{
static Map<String, Set<Param>> get(String content, Function<String, Map<String, List<Map<String, Object>>>> func)
{
return ...;
}
}