Java 8 zyklische Inferenzwarnung
Meine Kenntnisse über die Liste der Operationen ist von scripting Sprachen. Also in Java hörte ich auf etwas seltsames im Falle der Feststellung von Cookies mit bestimmten Namen.
List<Cookie> cookies = Arrays.asList(request.getCookies());
String auth = cookies.stream()
.filter(c -> c.getName().equals("auth"))
.map(Cookie::getValue);
Auf die map
Methode IntelliJ zeigt mir "Zyklische Inferenz".
Java compiler Error:(52, 25) java: inkompatible Typen: Nein-Instanz(en) von variable(N) R existieren, so dass java.util.stream.Stream ist konform zu java.lang.String
Kommentar zu dem Problem - Öffnen
Als die Nachricht sagt,
map
gibt einen Stream
und kann nicht zugewiesen werden String
. Sie müssen sagen, wie es werden sollte, ein einzelnes String
. Vielleicht möchten Sie verwenden Sie .findAny().get()
? Schöne Frage-und Antwort-aber ich weiß noch nicht, was eine zyklische Ableitung! Halten Googeln, das war das erste Ergebnis.
@JimLohse Diese Antwort erklärt, was eine zyklische Ableitung: stackoverflow.com/a/36258012/3142816. Im Grunde geben der innere Teilausdruck kann nicht geschlossen werden, ohne die Art der äußeren Teilausdruck, kann nicht abgeleitet werden, ohne den Typ der innere Teilausdruck
InformationsquelleAutor der Frage RobertW | 2014-10-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihrer aktuellen code gibt eine
Stream<String>
, so müssen Sie einen zusätzlichen Schritt, um einen string zurückgeben:Beachten Sie, dass es gibt ein
Optional<String>
denn es kann kein Cookie, das entspricht "auth". Wenn Sie möchten, verwenden Sie ein Standard, wenn "auth" nicht gefunden die Sie verwenden können:InformationsquelleAutor der Antwort assylias
Im wesentlichen, was diese ziemlich kryptische Fehlermeldung sagt, ist "der Ausgang des stream-Sequenz nicht übereinstimmen, was Sie die Zuordnung zu in the end", ex:
.findFirst().get()
So zu Debuggen, Zusammenstellung, entfernen Sie die Zuordnung (vorübergehend), oder, wie die andere Antwort sagt, etwas hinzufügen, die es macht, einen String zurückzugeben, der durch das sammeln von (ex:
.collect(Collectors.joining(","))
) oder (wie.findFirst().get()
), oder ändern Sie die Zuordnung, wieStream<String> stream = list.stream().map(...)
InformationsquelleAutor der Antwort rogerdpack