Kısaca:
Sıralama, kaynak veri yapısına ve ara akış işlemlerine bağlıdır. Bir List
işleme kullandığınızı varsayarsak , işlemin sipariş edilmesi gerekir (çünkü filter
buradaki sırayı değiştirmeyecektir).
Daha fazla detay:
Sıralı - Paralel - Sırasız:
Javadocs
S sequential()
Returns an equivalent stream that is sequential. May return itself, either because the stream was already sequential, or because the underlying stream state was modified to be sequential.
This is an intermediate operation.
S parallel()
Returns an equivalent stream that is parallel. May return itself, either because the stream was already parallel, or because the underlying stream state was modified to be parallel.
This is an intermediate operation.
S unordered()
Returns an equivalent stream that is unordered. May return itself, either because the stream was already unordered, or because the underlying stream state was modified to be unordered.
This is an intermediate operation.
Akış Sıralaması:
Javadocs
Akışların tanımlanmış bir karşılaşma sırası olabilir veya olmayabilir. Bir akışın karşılaşma sırasına sahip olup olmadığı, kaynağa ve ara işlemlere bağlıdır. Bazı akış kaynakları (Liste veya diziler gibi) içsel olarak sıralanır, ancak diğerleri (HashSet gibi) değildir. Sıralanmış () gibi bazı ara işlemler, aksi takdirde sıralanmamış bir akışa bir karşılaşma sırası uygulayabilir ve diğerleri, BaseStream.unordered () gibi sıralı bir akışı sırasız hale getirebilir. Ayrıca, forEach () gibi bazı uçbirim işlemleri karşılaşma sırasını göz ardı edebilir.
Bir akış sıralanırsa, çoğu işlem, karşılaşma sıralarındaki öğeler üzerinde çalışmak üzere sınırlandırılır; akışın kaynağı [1, 2, 3] içeren bir Liste ise, eşlemenin çalıştırılmasının sonucu (x -> x * 2) [2, 4, 6] olmalıdır. Bununla birlikte, kaynağın tanımlanmış bir karşılaşma sırası yoksa, [2, 4, 6] değerlerinin herhangi bir permütasyonu geçerli bir sonuç olacaktır.
Sıralı akışlar için, bir karşılaşma sırasının varlığı veya yokluğu performansı etkilemez, yalnızca determinizmi etkiler. Bir akış sipariş edilirse, özdeş bir kaynak üzerinde aynı akış boru hatlarının tekrar tekrar yürütülmesi aynı sonucu verecektir; sipariş edilmediği takdirde, tekrarlanan uygulama farklı sonuçlar doğurabilir.
Paralel akışlar için, sıralama kısıtlamasını gevşetmek bazen daha verimli yürütmeyi sağlayabilir. Yinelenenlerin filtrelenmesi (farklı ()) veya gruplandırılmış indirgeme (Collectors.groupingBy ()) gibi belirli toplu işlemler, öğelerin sıralanmasıyla alakalı değilse daha verimli bir şekilde uygulanabilir. Benzer şekilde, limit () gibi sırayla karşılaşmaya özünde bağlı olan işlemler, paralelliğin yararını zayıflatarak düzgün sıralamayı sağlamak için arabelleğe almayı gerektirebilir. Akışın bir karşılaşma sırasına sahip olduğu, ancak kullanıcının bu karşılaşma sırasını özellikle önemsemediği durumlarda, akışın sırasız () ile açıkça sırasının kaldırılması, bazı durum bilgisi olan veya uçbirim işlemleri için paralel performansı artırabilir. Bununla birlikte, yukarıdaki "blokların ağırlıklarının toplamı" örneği gibi çoğu akış hattı,