リスト操作に関する私の知識は、スクリプト言語から得たものです。だからJava特定の名前のCookieを見つけた場合に奇妙なことに立ち止まった。
List<Cookie> cookies = Arrays.asList(request.getCookies());
String auth = cookies.stream()
.filter(c -> c.getName().equals("auth"))
.map(Cookie::getValue);
map
メソッドで、IntelliJは "Cyclic inference"を表示しています。
Javaコンパイラエラー:(52、25)Java:互換性のない型:型変数Rのインスタンスが存在しないため、Java.util.stream.StreamがJava.lang.Stringに準拠しています
現在のコードはStream<String>
を返すため、文字列を返すには追加の手順が必要です。
Optional<String> auth = cookies.stream()
.filter(c -> c.getName().equals("auth"))
.map(Cookie::getValue)
.findAny();
「auth」に一致するCookieがない可能性があるため、Optional<String>
を返すことに注意してください。 「auth」が見つからない場合にデフォルトを使用する場合は、次を使用できます。
String auth = cookies.stream()
.filter(c -> c.getName().equals("auth"))
.map(Cookie::getValue)
.findAny().orElse("");
本質的に、このやや不可解なエラーメッセージが言っているのは、「ストリームシーケンスの出力は、最終的に割り当てているものと一致しません」です。
_String s = list.stream().map(s -> s); // this doesn't result in a String...
_
.findFirst()。get()したがって、コンパイルをデバッグするには、割り当てを(一時的に)削除するか、他の回答にあるように、収集してStringを返すものを追加します(例:.collect(Collectors.joining(","))
)または(.findFirst().get()
のようになる)、またはStream<String> stream = list.stream().map(...)
のような割り当てを変更する