Java 8循环推理警告

Rob*_*rtW 33 lambda intellij-idea java-8

我对列表操作的了解来自脚本语言.所以在Java中,我找到了一些奇怪的东西,以便找到具有特定名称的cookie.

List<Cookie> cookies = Arrays.asList(request.getCookies());
        String auth = cookies.stream()
                .filter(c -> c.getName().equals("auth"))
                .map(Cookie::getValue);
Run Code Online (Sandbox Code Playgroud)

map方法上,IntelliJ向我展示了"循环推理".

Java编译器错误:(52,25)java:不兼容类型:没有类型变量的实例R存在,以便java.util.stream.Stream符合java.lang.String

ass*_*ias 37

您当前的代码返回a Stream<String>,因此您需要一个额外的步骤来返回一个字符串:

Optional<String> auth = cookies.stream()
            .filter(c -> c.getName().equals("auth"))
            .map(Cookie::getValue)
            .findAny();
Run Code Online (Sandbox Code Playgroud)

请注意,它返回一个,Optional<String>因为可能没有与"auth"匹配的Cookie.如果您想使用默认值,如果找不到"auth",您可以使用:

String auth = cookies.stream()
            .filter(c -> c.getName().equals("auth"))
            .map(Cookie::getValue)
            .findAny().orElse("");
Run Code Online (Sandbox Code Playgroud)