Say mam ten strumieniowe:Java 8 Streams: Collapse/abstrakcyjne strumienie części
list.stream()
.map(fn1) // part1
.map(fn2) //
.filter(fn3) //
.flatMap(fn4) // part 2
.map(fn5) //
.filter(fn6) //
.map(fn7) //
.collect(Collectors.toList())
Jak mogę zrobić to wyglądać tak:
list.stream()
.map(fnPart1)
.map(fnPart2)
.collect(Collectors.toList())
bez ręcznego odwijania części FNX i zestawiając je (ze względów konserwacyjnych chcę je zachować nienaruszone i wyrazić fnPartX razem z nimi).
Mapa, w przeciwieństwie do flatMap i filter, nie może zmienić liczby elementów w strumieniu. –
@BenoitParis Mogłem źle zrozumieć pytanie, ale możesz przypisać część 1 do 'Stream' i part2 do 'Stream
Nie możesz. Przynajmniej nie możesz zrobić tego tak, jak chcesz (przy użyciu dwóch funkcji, używając 'map' w początkowym strumieniu). Dzieje się tak, ponieważ 'map()' działa na strumieniu * elementów * (transformuje każdy element strumienia, a nie sam strumień), więc nie można np. Filtrować elementów, które są operacjami nad samym strumieniem (usuwa niektóre elementy na podstawie warunku). –