W java 8, java.util.stream.Stream#forEach
należy rozważyć zastąpienie tradycyjnej pętli for. Ale dlaczego nie jest to funkcja łańcuchowa. Zwraca ona pustkę zamiast Stream<T>
.Dlaczego nie łańcuch java.util.stream.Stream # forEach
Ci się to
Arrays
.stream(Girls.toArray())
.forEach(Girls::getUp)
.forEach(Girls::dressUp)
.filter(/* Top 10 Girls */)
.forEach(Gay.getMe()::gotGirl)
.endFilter()// Not an API, but it means remove last filter
.filter(/* Worst 10 Girls */)
.forEach(Gay.get(0)::gotGirl)
girls = Arrays
.stream(Girls.toArray());
girls.forEach(g->{g.getUp();g.dressUp()});
girls.filter(/* Top 10 Girls */)
.forEach(Gay.getMe()::gotGirl);
girls.filter(/* Worst 10 Girls */)
.forEach(Gay.get(0)::gotGirl);
pierwszy jest ładny niż drugi one.But pierwszy dostał gorszą wydajność.
Dlaczego zatem forEach
nie nadaje się do kierowania?
jednak pamiętać, że mające skutki uboczne w 'peek()' lub 'mapie()' parametry behawioralne, które mogą kolidować ze źródła, lub wpływa na wynik innych operacji strumieniowych, jest nie-nie. Metoda "peek()" naprawdę służy tylko do debugowania/rejestrowania, a nie do obliczania wyniku; podobnie, 'map()' powinno być używane tylko do transformacji, a nie do ukrywania efektów ubocznych. –