16

Supplier<T>Guavaの逆を探しています。Consumerいいえ、または、存在しますがSink、プリミティブ値用です。

それはどこかに隠されていますか?

Supplier有用であるのと同じ種類の理由でそれを見たいと思います。確かに、使用はそれほど一般的ではありませんが、Suppliersたとえば の静的メソッドの多くは類似した方法で適用され、「この反復可能オブジェクトのすべての値をこのサプライヤに送信する」などを 1 行で表現すると便利です。

それまでの間、PredicateFunction<T,Void>は醜い回避策です。

4

3 に答える 3

9

あなたの選択肢は次のとおりです。

  • Java 8では、作成Consumer可能なインターフェースが導入されています。
  • Xtendの標準ライブラリにはProcedures.
  • ScalaにはFunction*; 関数の戻り値の型が の場合、Unit副作用と見なされます。

これらすべての言語で、関数型インターフェースを便利に使用できるため、関数型 Javaなども使用できますEffect

それ以外forの場合は、組み込みループなどの副作用を実行するために、既存の言語構造に依存することをお勧めします。Java < 8 では、ラムダを使用すると、構文上のオーバーヘッドが非常に大きくなります。この質問この議論を参照してください。

于 2013-02-05T14:55:19.627 に答える
0

a を使用してFunction、2 番目の Argument をjava.lang.Voidに設定すると、これFunctionは のみを返すことができますnull

于 2019-06-05T13:28:10.800 に答える
-1

あなたはすでに答えを見つけています。訪問したいだけの場合は、常に true を返す述語で filter を使用できます。あなたが非常に防御的である場合は、任意の述語を使用し、フィルター自体で alwaysTrue を使用して or 関数を使用できます。or短絡を避けるために、最後に を追加するだけです。

問題は、Predicate と Consumer が概念的に異なることに同意しますが、Predicate は可能な限りステートレスであり、コンシューマーは副作用だけであるのに対して副作用がないため、実際には唯一の構文上の違いは、1 つが返されることです。ブール値 (無視できます) と他の void です。Guava に Consumer があった場合、 Predicate を取るいくつかのメソッドを複製して Consumer も取るか、 Consumer に Predicate を継承させる必要があります。

于 2013-02-05T08:54:33.387 に答える