JDKは、ラムダ典型的な使用シナリオを豊かにする共通インタフェース機能の数を提供し、それらは主に java.util.functionパッケージを供給する。以下は、インターフェースの使用の簡単な例である機能します。
機能のインターフェイスの概要
java.util.function.Function <T、R>インターフェイスは、前提条件と呼ばれ、前者に係る別のデータ型へのデータ型を取得するために使用される事後条件と呼ばれます。
@FunctionalInterface パブリック インターフェース機能<T、R> { R適用(T tの); ...... }
抽象メソッド:適用されます
機能主インターフェースが抽象メソッドである:Rは、(T T)を適用し、パラメータの種類に応じて、T Rの結果の型を得ます。例えば、使用シナリオ:String型の変換のInteger型。
輸入java.util.function.Function。 パブリック クラスDemoFunctionApply { 公共 静的 ボイドメイン(文字列[]引数){ メソッド(S - > Integer.parseInt(S))。 } プライベート 静的 ボイドメソッド(関数<文字列、整数> 関数){ int型 NUM = function.apply( "10" )。 System.out.println(NUM + 20 )。 } }
プログラム、コンソール出力を実行します。
30
もちろん、最善の方法は、文言を参考にしています。
デフォルトの方法:andThen
関数インタフェースはデフォルト持って操作を組み合わせるために使用さandThen方法を。JDKソースコードなど。
デフォルト <V>関数<T、V> andThen(機能<?スーパー?Rは、延び V> 後){ Objects.requireNonNull(後)。 リターン(TのT) - > after.apply(適用(T))。 }
シナリオ法はまた、「何をすべきかを、最初に何をすべきか」のために使用され、消費者で同様のandThen:
輸入java.util.function.Function。 パブリック クラスDemoFunctionAndThen { 公共 静的 ボイドメイン(文字列[]引数){ 方法( STR - > Integer.parseInt(STR)+10 、 I - > I * = 10 )。 } プライベート 静的 ボイドメソッド(関数<文字列、整数> 1、機能<整数、整数> 2){ int型 NUM = one.andThen(2).apply( "10" )。 System.out.println(NUM + 20 )。 } }
プログラム、コンソール出力を実行します。
220
最初の操作は、10を乗じた文字列になるINT番号は、第2の操作で解析することです。2で動作一緒に長手andThenするために組み合わせます。
ノート、関数の事前条件と事後条件ジェネリックジェネリックは同じですしてください。
演習:カスタム関数モデルスプライシング
タイトル
使用シーケンスを動作させるための複数の機能を実行するために必要に応じて機能のスプライシング機能モデル、:
文字列str =「趙麗穎、20」。
- デジタル文字列の遮断部分の年齢は、文字列を取得します。
- 最後のステップは、デジタルint型の列に変換されます。
- 番号を取得し、ステップ100のint、int型の結果の数値。
答え
輸入java.util.function.Function。 パブリック クラスDemoFunction { 公共 静的 ボイドメイン(文字列[]引数){ 文字列str = "赵丽颖、20" 。 INT年齢= getAgeNum( STR、 sは - > s.split( "")[1 ]、 sは - > Integer.parseInt(S)、 N - > N + = 100 )。 System.out.println(年齢); } プライベート 静的 int型getAgeNum(文字列str、 関数 <文字列、文字列>一 関数 <文字列、整数> 2つの 機能 <整数、整数> 3){ リターンone.andThen(2).andThen(3つ).apply(STR)。 } }
プログラム、コンソール出力を実行します。
120