我对列表操作的了解来自脚本语言。因此,在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 compiler Error:(52, 25) java: incompatible types: no instance(s) of type variable(s) R exist so that java.util.stream.Stream conforms to java.lang.String
最佳答案
您当前的代码返回一个Stream<String>
,因此您需要执行一个额外的步骤来返回一个字符串:
Optional<String> auth = cookies.stream()
.filter(c -> c.getName().equals("auth"))
.map(Cookie::getValue)
.findAny();
请注意,它返回
Optional<String>
,因为可能没有与“auth”匹配的Cookie。如果未找到“auth”时要使用默认值,则可以使用:String auth = cookies.stream()
.filter(c -> c.getName().equals("auth"))
.map(Cookie::getValue)
.findAny().orElse("");
关于intellij-idea - Java 8循环推断警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26422166/