Anlayış Spliterator, Toplayıcı ve Java 8'de Akış
Sorun Java Stream
arabirim özellikle Spliterator
Collector
arabirimleri ile bir ilgisi yoktur nerede 8, anlayış yaşıyorum. Benim sorunum sadece henüz Spliterator
Collector
arabirimleri anlayamıyor ve sonuç olarak Stream
arayüz benim için hala biraz belirsiz.
Tam olarak Spliterator
Collector
nedir ve bunları nasıl kullanabilirim? Spliterator
Collector
(ve muhtemelen bu süreçte Stream
benim kendi benim kendi yazmak için hazırım, ben değil, ne yapmalıyım?
Bazı örnekler web etrafında dağınık okudum, ama burada her şey hala yeni ve değişikliklere tabi olduğundan, örnekler ve öğreticiler hala çok seyrek.
CEVAP
Neredeyse kesinlikle hiç bir kullanıcı olarak Spliterator
ile başa çıkmak için olmalıdır; yalnızca Collection
tür kendini ifade ve eğer gerekli olmalıdırayrıcaisteyen onlara parallelized işlemleri optimize etmek için.
Asıl önemli olan, bir Spliterator
yol işletim elementler üzerinde bir koleksiyon bir şekilde kolay ayırın parçası toplama, örneğin olduğun için parallelizing ve bir iş parçacığı için iş üzerinde bir parça toplama, bir iş parçacığı için iş diğer bir parçası vb.
Aslında hiç bu tür bir değişken için 15 ** tasarruf değerleri, ya da olmalıdır. Stream
gibi bir Iterator
işte bu tek seferlik bir kullanım nesnesi olacak hemen hemen her zaman kullanımda akıcı bir zincir gibi Javadoc örnek:
int sum = widgets.stream()
.filter(w -> w.getColor() == RED)
.mapToInt(w -> w.getWeight())
.sum();
Collector
"" işlemi a la/azaltmak; özellikle, paralellik ve sonuçlandırma adımları desteklemek gerekiyor. göster azaltmak en genelleştirilmiş, soyut mümkün sürümüdür Collector
s örnekler:
- toplamak,
Collectors.reducing(0, (x, y) -> x y)
ör - StringBuilder ekleme, örneğin
Collectors.of(StringBuilder::new, StringBuilder::append, StringBuilder::append, StringBuilder::toString)