Java necə işləyir

Mövzu seç, kod yaz və daxildə nə baş verdiyini addım-addım gör.

Memory

Collection-lar

Concurrency

Dil və JVM

Mövzular

Stream necə işləyir

Stream lazy-dir

filter və map işi görmür, yalnız pipeline-ı qurur. Terminal operation olmadan heç bir lambda işləmir.

Solda terminal seç: toList və ya başqa biri. Bundan sonra Növbəti düyməsi işləyəcək.

Element-lər bir-bir keçir

Çox adam elə bilir ki, əvvəl bütün element-lər filter-dən, sonra hamısı map-dən keçir. Belə deyil.

Hər element bütün pipeline-ı keçir, sonra növbəti element başlayır. Buna görə lazımsız iş azalır.

Solda list-i və əməliyyatları dəyiş: nəticə canlı hesablanır.

Short-circuit

findFirst, anyMatch və limit işi tez bitirə bilər. Nəticə tapılanda qalan element-lər ümumiyyətlə oxunmur.

Burada 6 element var, amma yalnız 2-si işlənir. Bu, sonsuz stream-lərin də işləməsinə imkan verir: Stream.iterate(...).limit(5).

sorted hamısını saxlayır

sorted stateful əməliyyatdır: sıralamaq üçün bütün element-ləri görməlidir. Ona görə element-lər onun qarşısında toplanır.

Sonrakı limit(2) işi azaltmır, source-dan hər şey oxunur. Mümkünsə filter-i sorted-dən əvvəl yaz.

distinct də bütün gördüyü dəyərləri yadda saxlayır, amma element-ləri dərhal buraxır.

count bəzən heç nə işlətmir

Burada map lambda-sı bir dəfə də işləmir. JDK 9-dan bəri ölçü məlumdursa, count element-ləri gəzmir.

filter əlavə et: ölçü artıq məlum deyil və lambda işləyir. Solda sına.

Tələ: peek və ya map-də yan təsirə güvənmə, işləməyə bilər.

Lambda obyektdir

Lambda bir functional interface object-idir. Capture etdiyi dəyərlər object-in içinə kopyalanır, ona görə local variable effectively final olmalıdır.

Capture etməyən lambda adətən eyni object olaraq qalır, capture edən isə hər dəfə yenisini yarada bilər.

Stream bir dəfəlikdir: terminal-dan sonra yenidən işlətmək olmaz.