JDKは、ラムダ典型的な使用シナリオを豊かにする共通インタフェース機能の数を提供し、それらは主に java.util.functionパッケージを供給する。以下に、消費者インターフェースの使用の簡単な例です。
消費者インターフェイスの概要
@FunctionalInterface パブリック インターフェース消費<T> { / ** *消費動作は、指定されたパラメータに対して行わ。 * * @Param T入力パラメータ * / 無効受け入れる(T T); デフォルトの消費者<T> andthen(消費者<?スーパー T> の後){ Objects.requireNonNull(後); リターン(T T) - > {受け入れ(T ); after.accept(T);}; } }
java.util.function.Consumer <T>は、単にとのインタフェースであるサプライヤインタフェース逆に、それが生産データではなく、データコンシューマは、データ型は汎用によって決まります。
抽象メソッド:受け入れます
消費者インターフェースが抽象メソッド含むボイド(T tを)受け入れる、消費データは汎用として指定されることを意図しています。次のような基本的な使い方
輸入java.util.function.Consumer; パブリック クラスDemo01Consumer { 公共 静的 ボイドメイン(文字列[]引数){ consumerString(S - > のSystem.out.println(S))。 } プライベート 静的 無効 consumerString(消費者<文字列> 機能){ function.accept( "こんにちは" ); } }
プログラム、コンソール出力を実行します。
こんにちは
もちろん、より良い方法が書かれたリファレンスを使用することです。
デフォルトの方法:andThen
メソッドのパラメータや戻り値が全てであれば、その後の消費データ、操作を最初に行うこと、及び組み合わせを達成するために、操作を行います。消費者のタイプ、あなたは効果を実現することができます。そして、このようにあるインターフェースのデフォルトの方法消費者andThen。
デフォルトの消費者<T> andThen(消費者<?スーパー T> の後){ Objects.requireNonNull(後)。 リターン(TのT) - > {(t)を受け入れます。after.accept(T)。}。 }
注:requireNonNullの静的メソッドのjava.util.Objectsがパラメータでイニシアチブを取るnullがスローされる
NullPointerExceptionが例外を。これは、if文を書き換える必要性を排除し、nullポインタ例外のトラブルをスローします。
組み合わせを達成するために、二つ以上のラムダ式をすることができ、かつandThenセマンティクスが操作「ステップバイステップ」です。例えば2段階の組み合わせの場合:
インポートjava.util.function.Consumer; パブリック クラスDemo02Consumer { 公共 静的 ボイドメイン(文字列[]引数){ consumerString( // 大文字に文字列を変換するためのtoUpperCase()メソッド S - > するSystem.out.println(S. toUpperCaseの())、 // toLowerCaseメソッド()下げに変換文字列への方法 Sを- > のSystem.out.println(s.toLowerCase()) ); } プライベート 静的 無効 consumerString(消費者<文字列>の一つ、消費者<文字列> TWO){ one.andThen(TWO).accept( "こんにちは" ); } }
結果は、まず、ハロー小文字完全に印刷し、実行して完全に大文字のHELLOを印刷します。もちろん、追加の手順は、チェーンの文言の組み合わせによって実現されてもよいです。
ハロー
ハロー
演習:フォーマットされた印刷情報
タイトル
そこに情報のうち、文字列の次の配列、フォーマットに従う「名前:. XX:XXのセックス。」フォーマットが情報を出力します。印刷動作は、第1名として必要ラムダ消費者インターフェースのインスタンス、第二の性として印刷動作ラムダ消費者インターフェースインスタンス二一緒に「スプライシングされた」消費者インターフェース順序。
文字列[]配列= { "のび太、M"、 "しずか、女性"、 "パンのHu、M"}。
答え
輸入java.util.function.Consumer; パブリック クラスDemoPrintInfo { 公共 静的 ボイドメイン(文字列[]引数){ 文字[]配列 = { "大雄、男"、 "静香、女"、 "胖虎、男" }。 PRINTINFO( S - > System.out.print( "姓名:" + s.split( "")[0] + "" )、 sは - >のSystem.out.println( "性别:" + s.split ""( "")[1] + )、 配列 ); } プライベート 静的 無効 PRINTINFO(消費者<文字列> 1、消費者<文字列> 2、 (2).accept(情報)one.andThen。 } } }
プログラム、コンソール出力を実行します。
名前:のび太、性別:男性。
名前:静香、性別:女性。
名前:パン胡、性別:男性。