2016-04-25 4 views
0

Der Versuch, eine Sammlung mit einem Stream zu filtern und das folgende Lambda an filter() zu übergeben, ein Set, das den arkanen Fehler in der Titel:Java Lambda in Intellij: Erwartet nicht null, aber der Lambda-Text ist nicht wertkompatibel

unmatchedIncomingFields.stream().filter(s-> s.matches(fieldMatchPattern)) 

Zwischenzeit ein Prädikats Objekt erstellt funktioniert:

unmatchedIncomingFields.stream().filter(new Predicate<String>() { 
    @Override 
    public boolean test(String s) { 
     return s.matches(fieldMatchPattern); 
    } 
}); 

nach dem JLS, eine Lambda-Körper ist „Wert-kompatibel“, wenn jeder Steuerpfad einen Wert zurückgibt. matches() wird immer aufgerufen und gibt immer einen booleschen Wert zurück, so dass ich das Problem nicht verstehe.

Ich habe auch alle Arten von Variationen der gleichen lambda- mit und ohne Klammern und Argumenttypen und die Verwendung von Ausdruck und Block-mit-Rückkehr Körper versucht.

+0

Was ist der Typ von 'unmatchedIncomingFields'? –

+0

Können Sie ein kleines reproduzierbares Beispiel und die von Ihnen verwendete Compiler-Version angeben? –

+0

@AlexisC. Der Compiler ist 1.8.0_77. Ich arbeite daran, eine Demonstration zu bekommen. – ThisIsNoZaku

Antwort

4

Das Problem scheint falsch oder zumindest etwas irreführend zu sein, Fehlerhervorhebung innerhalb von IntelliJ, was den tatsächlichen Fehler verwirrte. Der Filter tritt in einem anderen Lambda für eine map() -Operation auf, für die ich noch keine Rückgabe angegeben hatte, und aus irgendeinem Grund markiert IntelliJ das innere Lambda für den Filter, so dass es so aussieht, als wäre es der mit dem Error.

+0

Richtig, ähnliches ist mir gerade passiert. Vielen Dank! – Marcin

+0

Das sieht in Intellij wie ein echter Fehler aus, da mir genau das gleiche passiert ist. Haben wir schon ein Problem angemeldet? –

Verwandte Themen