2016-10-31 5 views
0

haben eine Funktion, die eine Set<> ich diese Funktion über eine andere Sammlung anwenden möchten zurückgibt, erstellen eine abgeflachte Set<> unten ist der Code-Schnipsel mit Karte mit nur VariablenJava 8 - Kann nicht auf Strom flatMap

repository.findAll().stream().map(
       p -> forecastService.forecast(p, timeLineInYear, label) 
     ).collect(Collectors.toSet()); 

umbenannt ForecastService kehrt Set<Forecast> so dass die obige Anweisung gibt Set<Set<Forecast>>

wenn ich versuche, die gleiche Aussage mit einem flatMap

Dreh

Ich erhalte einen Kompilierungsfehler

keine Instanz des Typs Variable R vorhanden sein, damit Set<Forecast> entspricht Stream<? extends R>

jede Hilfe dankbar.

+3

Der Aufruf von flatMap erwartet einen Stream, kein Set. Probieren Sie 'p -> prognoseService.forecast (p, timeLineInYear, label) .stream()' aus. –

Antwort

0

Sie machen es falsch. Die flatMap Methode konvertiert Ihren Stream von Stream -> Stream. Wenn Sie alle Elemente in Ihrem Satz sammeln möchten, verwenden Sie bitte stream.reduce().

+0

Dies ist nicht das komplette Gegenteil von dem, was scala collection kann, wo flatmap Ihre Sammlung flacht und reduziert reduziert Ihre Sammlung auf ein einzelnes Element. Ich kann sehen, was Sie mit reduzieren vorgeschlagen haben, kann immer noch funktionieren, aber es ist, denke ich, ist immer noch eine Arbeit herum –