第3章 JDKの機能インターフェイス JDKの機能インタフェース
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
多くの関数型プログラミング言語では、引数や戻り値の型、実際の使用ケースに関係なく、ラムダを記述するために「関数」という単一かつ動的な概念のみを使用している。 一方、Javaはラムダを含むすべてのものに有形型を必要とする厳格な型付き言語である。 そのためJDKでは、関数型ツールセットを開始するための40以上の関数型インタフェースをjava.util.function 。
この章では、最も重要な機能的インタフェースを紹介し、なぜこれほど多くのバリエーションがあるのかを説明し、自分のコードをより機能的に拡張する方法を紹介する。
機能的インタフェースの4大カテゴリー
java.util.function 、40以上の機能的インタフェースは4つのメイン関数に分類され、各カテゴリは重要な機能的ユースケースを表している:
-
関数は引数を受け取り、結果を返す。
-
コンシューマは引数だけを受け取り、結果を返さない。
-
サプライヤーは引数を受け付けず、結果のみを返す。
-
述語は引数を受け取って式と照合し、その結果として
booleanプリミティブを返す。
これら4つのカテゴリーは、多くのユースケースをカバーしており、その名前付けは機能的インターフェースのタイプとそのバリエーションに関連している。
機能的インタフェースの4つのメインカテゴリーを見てみよう。
関数
java.util.function.Function<T, R> 図3-1に見られるように、関数は単一の入力と出力を持つ "古典的な "関数である。
図3-1. java.util.function.Function<T, R>
Function<T, R> の単一の抽象メソッドはapply と呼ばれ、T 型の引数を受け入れ、R 型の結果を生成する:
@FunctionalInterfacepublicinterfaceFunction<T,R>{Rapply(Tt);}
以下のコードは、null をチェックし、String をInteger としてその長さに変換する方法を示している:
Function<String,Integer>stringLength=str->str!=null?str.length():0;Integerresult=stringLength.apply("Hello, Function!");
入力タイプT と出力タイプR は同一でも構わない。しかし、「関数のアリティ」では、同一のタイプを持つ特殊化された機能インタフェースのバリエーションについて述べている。
コンシューマ
図3-2に示すように、コンシューマは入力パラメータを消費するだけで、何も返さない。中心的なコンシューマの機能インタフェースはjava.util.function.Consumer<T> である。
図3-2. java.util.function.Consumer<T>
Consumer<T> の単一の抽象メソッドはaccept と呼ばれ、 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access