Javaの8機能的インタフェース
機能的インタフェース(機能Interface)は、共通のインタフェースを有する方法です。
機能インタフェースは、暗黙的にラムダ式に変換することができます。
関数インタフェースは、既存の機能に優しいラムダをサポートすることができます。
JDK 1.8の前に関数インタフェースを持っています。
- java.lang.Runnableの
- java.util.concurrent.Callable
- java.security.PrivilegedAction
- java.util.Comparator
- java.io.FileFilter
- java.nio.file.PathMatcher
- java.lang.reflect.InvocationHandler
- java.beans.PropertyChangeListener
- java.awt.event.ActionListener
- javax.swing.event.ChangeListener
JDK 1.8新しく追加された関数インタフェース:
- java.util.function
java.util.functionこれは、Javaプログラミング、機能インタフェースのこのパッケージをサポートするために多くのクラス、関数が含まれています。
いいえ。 | インターフェイスと説明 |
---|---|
1 | BiConsumer <T、U> これは、2つの入力パラメータを取る操作を表し、結果を返しません。 |
2 | 二機能<T、U、R> それは、この方法は、2つの入力パラメータを受け入れ表し、その結果を返します。 |
3 | BinaryOperator <T> 操作の同じタイプの2つのオペレータの代わりに動作し、操作者は、結果の同じ種類を返します |
4 | BiPredicate <T、U> これは、2つのパラメータブール値メソッドを表し |
5 | BooleanSupplier これは、プロバイダの結果のブール値を表し、 |
6 | 消費者<T> 表す入力パラメータなしリターン操作を受け付けます |
7 | DoubleBinaryOperator これは、2つのdouble値のオペレータ操作を代表して行動し、double値の結果を返します。 |
8 | DoubleConsumer パラメータのdouble値の代わりに操作を受け付け、その結果を返しません。 |
9 | DoubleFunction <R> 二重パラメーター法に代わって受け入れ、その結果を返します。 |
10 | DoublePredicate これは、パラメータのブール値がdouble値のメソッドを持って表し、 |
11 | DoubleSupplier 値は、二重構造のプロバイダを表し、 |
12 | DoubleToIntFunction double型の入力を受け入れ、int型の結果を返します。 |
13 | DoubleToLongFunction double型の入力を受け付け、その結果のロングタイプを返します。 |
14 | DoubleUnaryOperator 戻り値の型はまた、二重で、二重の同じタイプのパラメーターを受け入れます。 |
15 | 機能<T、R> 入力パラメータを受け取り、結果を返します。 |
16 | IntBinaryOperator 同じint型を持つ2つのパラメータを受け取り、戻り値の型もintです。 |
17 | IntConsumer int型の入力パラメータ、ノーリターン値を受け入れます。 |
18 | IntFunction <R> int型の入力パラメータを受け入れ、その結果を返します。 |
19 | IntPredicate :int型の入力パラメータを受け入れ、結果のブール値を返します。 |
20 | IntSupplier 引数とint型の結果を返しません。 |
21 | IntToDoubleFunction int型の入力を受け付け、double型の結果を返します。 |
22 | IntToLongFunction int型の入力を受け付け、その結果のロングタイプを返します。 |
23 | IntUnaryOperator 同じint型のパラメータを受け入れ、戻り値の型もintです。 |
24 | LongBinaryOperator それは長い、長い、戻り値の型の同じ型の2つのパラメータを受け付けます。 |
25 | LongConsumer これは、入力パラメータのlong型、ノーリターン値をとります。 |
26 | LongFunction <R> 入力パラメータのロングタイプを受け入れ、結果を返します。 |
27 | LongPredicate Rは長い入力パラメータを受け取り、ブール値型の結果を返します。 |
28 | LongSupplier パラメータず、long型の結果値を返しませ。 |
29 | LongToDoubleFunction 入力のロングタイプを受け入れ、double型の結果を返します。 |
30 | LongToIntFunction 入力のロングタイプを受け入れ、int型の結果を返します。 |
31 | LongUnaryOperator それは長い、長い、戻り値の型の同じタイプのパラメーターを受け入れます。 |
32 | ObjDoubleConsumer <T> オブジェクト型と入力パラメータ、戻り値のないのdouble型を受け入れます。 |
33 | ObjIntConsumer <T> オブジェクト型とint型の入力パラメータ、ノーリターン値を受け入れます。 |
34 | ObjLongConsumer <T> オブジェクト型と入力パラメータのlong型、ノーリターン値を受け入れます。 |
35 | 述語<T> 入力パラメータを受け取り、ブール型の結果を返します。 |
36 | サプライヤー<T> パラメータはありませんし、その結果を返しませ。 |
37 | ToDoubleBiFunction <T、U> これは、2つの入力パラメータを受け入れ、double型の結果を返します |
38 | ToDoubleFunction <T> 入力パラメータを受け入れ、double型の結果を返します |
39 | ToIntBiFunction <T、U> これは、2つの入力パラメータを受け取り、int型の結果を返します。 |
40 | ToIntFunction <T> 入力パラメータを受け入れ、int型の結果を返します。 |
41 | ToLongBiFunction <T、U> これは、2つの入力パラメータを受け取り、結果のロングタイプを返します。 |
42 | ToLongFunction <T> 入力パラメータを受け取り、結果のロングタイプを返します。 |
43 | UnaryOperator <T> タイプT、Tの戻り値の型のパラメータを受け入れます |
機能的なインターフェイスインスタンス
述語<T>インターフェイスは、入力パラメータTを受け入れ、ブール結果を返す機能インターフェースです。
インターフェイスは、いくつかのデフォルトの方法は、他の複雑な述語(:AND、OR、NOTなど)の論理に統合されますが含まれています。
このインターフェイスは、オブジェクトがtrueまたはfalseですテストするために使用されます。
私たちは、次の例(Java8Tester.java)によって述語は<T>を使用する関数インタフェースを理解することができます。
import java.util.Arrays; import java.util.List; import java.util.function.Predicate; public class Java8Tester { public static void main(String args[]){ List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9); // Predicate<Integer> predicate = n -> true // n 是一个参数传递到 Predicate 接口的 test 方法 // n 如果存在则 test 方法返回 true System.out.println("输出所有数据:"); // 传递参数 n eval(list, n->true); // Predicate<Integer> predicate1 = n -> n%2 == 0 // n 是一个参数传递到 Predicate 接口的 test 方法 // 如果 n%2 为 0 test 方法返回 true System.out.println("输出所有偶数:"); eval(list, n-> n%2 == 0 ); // Predicate<Integer> predicate2 = n -> n > 3 // n 是一个参数传递到 Predicate 接口的 test 方法 // 如果 n 大于 3 test 方法返回 true System.out.println("输出大于 3 的所有数字:"); eval(list, n-> n > 3 ); } public static void eval(List<Integer> list, Predicate<Integer> predicate) { for(Integer n: list) { if(predicate.test(n)) { System.out.println(n + " "); } } } }
上記のスクリプトの実装、出力は次のようになります。
$ javac Java8Tester.java $ java Java8Tester 输出所有数据: 1 2 3 4 5 6 7 8 9 输出所有偶数: 2 4 6 8 输出大于 3 的所有数字: 4 5 6 7 8 9