Biraz assylias (kesinlikle doğru olan) söylediklerini uzatmak istiyoruz. Bu özellikler, int
no'lu düzlem olarak uygulanmıştır, ikili gösterimdir.
İlk. Öncelikle hepsi sıfırdır, ancak belirli bir özelliği eklediğinizde, bitişlemi ile ayarlanmış, AND
işlemi ile kaldırılmıştır. Bu sağdan birine 7-inci bit ayarlıyor
System.out.println(Integer.toBinaryString(Spliterator.SIZED)); // 1000000
: Belli Spliterator mülkiyet örneğin yaparak sadece kendi one
battığı yere
görebilirsiniz. Yani kontrol ederken: Bu özellikle bit ayarlanırsa Aslında kontrol ediyoruz
Spliterator<Integer> spliterator = Stream.of(8, 3, 5, 6, 7, 4).spliterator();
System.out.println((spliterator.characteristics() & Spliterator.SIZED) == Spliterator.SIZED);
.
İkinci
ilk akışı yaratma (ve iki) sonucunda belirlenir akışı özellikleri vardır. Ya kitap biraz modası geçmiş ya da bize tüm örnek gösterdi koymadık:
Spliterator<Integer> spliterator = Stream.of(8, 3, 5, 6, 7, 4).spliterator();
System.out.println(Integer.bitCount(spliterator.characteristics())); // 4
System.out.println(Integer.toBinaryString(spliterator.characteristics()));// 100010001010000
(one
eşittir) Bu set bit SIZED
, ORDERED
, IMMUTABLE
, SUBSIZED
karşılık gelmektedir.
Göstermiş olduğunuz diğer şeyler de biraz açık - kendiniz de kontrol edebilirsiniz.
Üçüncü
Bu özellikler akışı işlemede son derece önemlidir.Birkaç örnek: Java-9
long howMany = Stream.of(1, 2, 3).map(x -> {
System.out.println("mapping");
return x * 2;
}).count();
System.out.println(howMany); // 3
akışta (eğer SIZED
karakteristik temizlenmiş değil) değişmemiştir çünkü, mapping
baskılı görmez; bu nedenle haritalamayı hiç değerlendirmeye bile gerek yok.
Stream<Integer> unlimited = Stream.iterate(0, x -> x + 1);
System.out.println(unlimited.spliterator().hasCharacteristics(Spliterator.SIZED));
Stream<Integer> limited = unlimited.limit(3);
System.out.println(limited.spliterator().hasCharacteristics(Spliterator.SIZED));
Çıktı false true
olması gerektiğini düşünürdüm - bir sonuçta limit
, ancak hiçbir ekliyoruz; Sonuç false false
: çok fazla önleme olmasa bile böyle bir optimizasyon yapılmaz.
Hayır, tüm parçacığı verdim. Kitabın eski sürümüne sahip olabilir miyim. –
Üçüncü örnek (ikinci snippet), jdk9 bununla ilgilenmiyor mu? –