【发布时间】:2014-10-17 09:38:28
【问题描述】:
我对列表操作的了解来自脚本语言。因此,在 Java 中,如果找到具有特定名称的 cookie,我会停下来做一些奇怪的事情。
List<Cookie> cookies = Arrays.asList(request.getCookies());
String auth = cookies.stream()
.filter(c -> c.getName().equals("auth"))
.map(Cookie::getValue);
在map 方法中,IntelliJ 向我展示了“循环推理”。
Java 编译器错误:(52, 25) java:不兼容的类型:不存在类型变量 R 的实例,因此 java.util.stream.Stream 符合 java.lang.String
【问题讨论】:
-
如消息所述,
map返回一个Stream,不能分配给String。你必须告诉它应该如何成为一个单一的String。也许你想使用.findAny().get()? -
很好的问答,但我仍然不知道什么是循环推理!将继续谷歌搜索,这是第一个结果。
-
@JimLohse 这个答案解释了什么是循环推理:stackoverflow.com/a/36258012/3142816。基本上,没有外部子表达式的类型就无法推断出内部子表达式的类型,没有内部子表达式的类型就无法推断出内部子表达式的类型
标签: intellij-idea lambda java-8