2016-01-07 21 views
6

MongoIterable.forEach, Java 8 Consumer'a çok benzeyen bir Block gerektirir. , örneğin, aşağıdaki derleme değil Bunlar sorunlara neden olacak kadar benzer: derleyici Iterable.forEach(Consumer) ve MongoIterable.forEach(Block) arasında karar veremezMongoIterable.forEach vs. Iterable.forEach

MongoIterable<Document> result = collection.find(...); 
result.forEach(System.out::println); 

çünkü. alternatif

Block<Document> printer = System.out::println; 
result.forEach(printer); 

veya bir düz Stream olarak MongoIterable tedavi:

Neden MongoIterable.forEach Consumer arabirimini kullanarak tanımlı değil
StreamSupport.stream(result.spliterator(), false).forEach(System.out::println); 

, gibi bir şey: MongoIterable.forEach(Consumer<? super TResult> consumer) bu açıkça parametreyi yazarak gibi geçici çözümler gerektirir Tespit? Daha da iyisi - neden MongoIterable'da forEach var?

cevap

3

Java sürücüsü hala Java 6'yı hedef olarak destekliyor. Bu nedenle, 3.0 sürücü Java 8 ve lambda uyumlu hale getirme girişimleri yapılırken, gerçek Java 8 arayüzlerini kullanamadık.

+0

Bu, Tüketici'nin neden kullanılmadığını açıklıyor, ancak neden daha önce MongoIterable.forEach'a sahip olduğu konusunda hala net değilim. Java 8 kullanıcılarına Java 8 benzeri bir deneyim kazandırmak mı? –

+0

Daha kolay hale getirilmesi amaçlandı. Bu hedefe ulaşılırsa jüri hala dışarıda. – evanchooly

+1

"forEachMongo" (veya belki daha havalı bir isim?) Gibi ad sınıfından kaçınmak için farklı bir ada sahip olmak güzel olurdu. Neyse ki basit bir yazı türü sorunu çözüyor. –