MongoIterable.forEach
は、Java 8 Consumer
とよく似ているBlock
が必要です。彼らは問題を引き起こすほど類似している は、例えば、以下はコンパイルされません:MongoIterable.forEach対Iterable.forEach
MongoIterable<Document> result = collection.find(...);
result.forEach(System.out::println);
コンパイラはIterable.forEach(Consumer)
とMongoIterable.forEach(Block)
の間で決めることができないため。これを修正することは、明示的にパラメータを入力するなどの回避策を必要とします。
Block<Document> printer = System.out::println;
result.forEach(printer);
または代わりに、プレーンなStream
としてMongoIterable
の治療:MongoIterable.forEach(Consumer<? super TResult> consumer)
:
StreamSupport.stream(result.spliterator(), false).forEach(System.out::println);
はなぜMongoIterable.forEach
Consumer
インタフェース、のようなものを使用して定義されていませんか?さらに良い - なぜforEach
がMongoIterable
にあるのですか?
これは、消費者が使用されない理由を説明しますが、最初にMongoIterable.forEachを持っている理由についてはっきりしていません。それはJava 8以外のユーザーにJava 8のような経験を与えることですか? –
よりフレンドリーにすることを目的としていました。陪審員は、その目標が達成されたかどうかはまだ分かりません。 – evanchooly
'forEachMongo'のような名前のクラスを避けるために、別の名前をつけてもいいでしょう(あるいはもっとクールな名前ですか?)。幸いなことに、シンプルな型キャストはこの問題を解決します。 –