JAva 8のLambda式2:内蔵関数インタフェース
jdk 1から.8はユーザーの開発を容易にするために新しいパッケージを提供し始めた:java.util.functionは,このパッケージの中でユーザが行う可能性のある関数式インタフェースについて共通定義を行った.javaでutil.functionパッケージで最もコアなインタフェースは4つあります.機能型インタフェース:Function 消費型インタフェース:Consumer 供給型インタフェース:Supplier 断言形インタフェース:Predicate 1.機能型インタフェース
例:String型データを受信し、int型データを返す機能型インタフェースを実装するIntegerクラスを参照するparseInt()メソッド.
つまり,データを入力し,結果を返す方法はFunctionインタフェースで定義できる.
2.消費型インタフェース:Consumer
まずConsumerインタフェースの定義を観察します.
例:消費型インタフェースを用いてSystemを参照する.out.println()メソッド
3.供給型:Supplier
インタフェースの定義:
このインタフェースのメソッドにはパラメータはありませんが、データを返すことができます.例:供給型メソッドリファレンス、Systemを設定.currentTimeMillis
4.アサーション型インタフェース:Predicate
まず、インタフェース定義を確認します.
例:Stringクラスのmatchesメソッドを参照
以上の4つはコアインタフェースであり、他のインタフェースはそれに似ています.BiFunctionの場合、このインタフェースは次のように定義されます.
Functionインタフェースとは異なりますが、ここでは2つのパラメータを設定できます.例:BiFunctionインタフェースを使用してStringクラスを参照するreplaceAll()メソッド
関数式のインタフェースを提供すると、システムクラスライブラリにも大量に表示されます.CollectionインタフェースにforEach()メソッド、default void forEach(Consumer)を新たに定義しました
内蔵の関数式インタフェースが提供するため、開発基準を同意させ、後日ユーザーは自分で関数式インタフェースを開発する必要がなくなり、javaを直接使用する.util.functionパッケージのインタフェースでいいです.
@FunctionalInterface
public interface Function<T, R> {
R apply(T t);//
}
例:String型データを受信し、int型データを返す機能型インタフェースを実装するIntegerクラスを参照するparseInt()メソッド.
public class TestDemo {
public static void main(String[] args) {
Function<String,Integer> fn=Integer::parseInt;
int num=fn.apply("100");
System.out.println(num*2);
}
}
つまり,データを入力し,結果を返す方法はFunctionインタフェースで定義できる.
2.消費型インタフェース:Consumer
まずConsumerインタフェースの定義を観察します.
@FunctionalInterface
public interface Consumer<T>{
public void accept(T t);// ,
}
例:消費型インタフェースを用いてSystemを参照する.out.println()メソッド
public class TestDemo {
public static void main(String[] args) {
Consumer<String> con =System.out :: println;
con.accept("Hello Lambda");
}
}
3.供給型:Supplier
インタフェースの定義:
@FunctionalInterface
public interface Supplier<T> {
T get();
}
このインタフェースのメソッドにはパラメータはありませんが、データを返すことができます.例:供給型メソッドリファレンス、Systemを設定.currentTimeMillis
public class TestDemo {
public static void main(String[] args) {
Supplier<Long> sup=System::currentTimeMillis;
System.out.println(sup.get());
}
}
4.アサーション型インタフェース:Predicate
まず、インタフェース定義を確認します.
@FunctionalInterface
public interface Predicate<T> {
boolean test(T t);
}
例:Stringクラスのmatchesメソッドを参照
public class TestDemo {
public static void main(String[] args) {
String str="100";
Predicate<String> pre=str::matches;
System.out.println(pre.test("\\d+"));
}
}
以上の4つはコアインタフェースであり、他のインタフェースはそれに似ています.BiFunctionの場合、このインタフェースは次のように定義されます.
@FunctionalInterface
public interface BiFunction<T, U, R> {
R apply(T t, U u);
}
Functionインタフェースとは異なりますが、ここでは2つのパラメータを設定できます.例:BiFunctionインタフェースを使用してStringクラスを参照するreplaceAll()メソッド
public class TestDemo {
public static void main(String[] args) {
String str="hello";
BiFunction<String,String,String> bf =str::replaceAll;
System.out.println(bf.apply("l", "-"));// he--o
}
}
関数式のインタフェースを提供すると、システムクラスライブラリにも大量に表示されます.CollectionインタフェースにforEach()メソッド、default void forEach(Consumer)を新たに定義しました
public class TestDemo {
public static void main(String[] args) {
List<String> pro=new ArrayList<String>();
pro.add("java");
pro.add("android");
pro.add("ios");
pro.add("python");
pro.add("node.js");
pro.add("html");
pro.forEach((s)->System.out.println(s));
pro.forEach(s->System.out.println(s));// , , ()
}
}
内蔵の関数式インタフェースが提供するため、開発基準を同意させ、後日ユーザーは自分で関数式インタフェースを開発する必要がなくなり、javaを直接使用する.util.functionパッケージのインタフェースでいいです.