Kiedy dzwonię, Stream.sort(..)
czy tworzona jest nowa tablica elementów, a strumień iteruje po nowo utworzonej posortowanej tablicy?
Innymi słowy, jak Java 8 Stream działa sort
pod maską?
java
java8
stream-processing
Poinformowano
źródło
źródło
Odpowiedzi:
Możesz użyć grepcode.com, aby przeszukać standardowy kod biblioteki Java (i niektóre inne biblioteki). Niestety kod implementacji strumienia jest raczej abstrakcyjny. Dobrym punktem wyjścia jest
java.util.stream.SortedOps
klasa wewnętrzna, która przekształca strumień w posortowany strumień.Prąd realizacja (stosowany dla strumieni standardowych kontenerów biblioteki) sprawia, że rozkaz pusty, jeżeli strumień jest już posortowana wykorzystuje tablicę jeżeli wielkość strumienia jest znany (
SizedRefSortingSink
) lub gromadzi wszystkie elementy ArrayList Jeżeli rozmiar nieznany (RefSortingSink
).Oczywiście takie szczegóły implementacji mogą ulec zmianie w każdej wersji, ale podstawowe uwagi są uniwersalne: Sortowanie strumienia jest koniecznie operacją chętną / blokującą, a sortowanie strumienia nieskończonego nie ma znaczenia. Oznacza to, że sortowanie strumienia nie jest przydatne, jeśli używasz strumieni, ponieważ mogą być leniwe, ale nadal masz wygodną składnię strumienia.
Inne strumienie będą musiały zapewnić własną implementację
Stream.sorted()
, która prawdopodobnie będzie podobna.źródło