Javaの関数インタフェース


関数インタフェースとは?
オブジェクト向け言語javaは8に入り、「関数式開発モード」のサポートを開始します.
これにより、Javaは再利用可能なコードブロックをより多く作成でき、柔軟な開発の可能性が増加します.
では、このような関数式の開発方式とオブジェクト向けの開発方式はどのような違いがあるのでしょうか.
二人の最大の違いは값을 취급하는 단위가 어디까지 인지에 따라 나눌 수 있다です.
Javaは、値(ステータス)と動作を処理するためのデフォルトの単位をオブジェクトとして定義し、これらのオブジェクトをクラス形式で実装します.
これに対して,関数式開発手法の挙動部分も値と見なすことができる.
これにより、コード回収ユニットはクラスから関数に再使用でき、開発がより柔軟になります.
関数単位で繰り返し使用しますか?🤔
たとえば、Calculatorというクラスがあり、Calculatorというフレームワークaddメソッドを実行しています.
関数インタフェースにより、addメソッドのフレームワークを作成し、すぐに再使用できます.
class Calculator {
    public int add(int a, int b) {
        return a+b;
    }
}

public class 함수형_인터페이스 {
    public static void main(String[] args) {
        BinaryOperator<Integer> add = Integer::sum;

        System.out.printf("객체 지향 개발 방식 %d\n", new Calculator().add(3, 5));
        System.out.printf("함수형 개발 방식 %d", add.apply(3, 5));
    }
}

// 출력
// 객체 지향 개발 방식 8
// 함수형 개발 방식 8
関数インタフェースのタイプ
パラメータと戻り値に基づいて、異なる関数化インタフェースを作成できます.
タイプパラメータ戻りは、Runableの基本形状のインタフェース、パラメータ、戻り値のいずれもSupplierパラメータが汎用タイプの戻り値のみを持つインタフェースが存在しないことを示します.常に同じ値を返すConsumerは汎用タイプのパラメータのみ、戻り値のないインタフェースPredicateBoolean汎用タイプのパラメータ、およびBooleanタイプの戻り値を持つインタフェース機能汎用タイプのパラメータおよびその他の汎用タイプの戻り値のインタフェースUnaryOperatorは、同じタイプのパラメータ(T>および戻り値など)を有する2つのインタフェースBinaryOperatorを受け取り、同じタイプの戻り値を有する2つのインタフェースBiConsumerT,U>は、他のタイプの2つのパラメータを受信し、戻り値のないインタフェースBiConsdicateBooleanは2つの他の汎用タイプのパラメータを受信し、Booleanタイプの戻り値を有するインタフェースBiFunctionは2つの他の汎用タイプのパラメータを受信し、他の汎用タイプの戻り値を有するインタフェースComparatorなどの汎用タイプのパラメータを有し、Integer戻り値を有するインタフェースである.オブジェクト間の値を比較するためのインタフェース
Consumer
「Consumer」は、パラメータが消費され、accpet()を介してアクセスされるが、戻り値がないことを示す.
インタフェース名抽象方法は、Consumervoid accept(T)オブジェクトTを受信してBiConsumervoid accept(T,U)オブジェクトTを消費することを示す.U受入消費DoubleConsumervoid accept(二値)二値消費IntConsumervoid accept(int value)int値受入消費LongConsumervoid accept(longvalue)長値、受入消費ObjectDoubleConsumervoid accept(T,二値)対象Tと二値消費ObjectInt>accept(T,int value)受信対象Tおよびint値は、ObjectLongConsumervoid accept(T,longvalue)対象Tおよびlong値を消費するように消費される
名前はパラメータタイプによって異なりますが、関数の実行ロジックは同じです.
public class 함수형_인터페이스 {
    public static void main(String[] args) {
        Consumer consumer = s -> System.out.println("입력 값 출력 : " + s);
        consumer.accept("hello");
    }
}

// 출력
// 입력 값 출력 : hello
SupplierSupplierは、パラメータなしでget()メソッドを有し、戻り値のみを有する.
インタフェース名抽象メソッドは、SupplierT get()TオブジェクトがBoolean値を返し、DoubleSupplier GetAsBoolean()boolean値を返し、DoubleSupplier GetAsset()2値を返し、Int値を返し、LongSupplielong Asselong()長値を返す
public class 함수형_인터페이스 {
    public static void main(String[] args) {
        Supplier<String> success = () -> {
            return "성공했습니다.";
        };

        String message = success.get();
        System.out.println(message);
    }
}

// 출력
// 성공했습니다.
FunctionFunctionインタフェースは、パラメータおよび戻り値を含むapply()メソッドを有する.
このメソッドの役割は、パラメータを戻り値(タイプの変化)にマッピングすることです.
インタフェース名抽象法は、FunctionR apply(T)オブジェクトTからオブジェクトRへのマッピングBiFutionR apply(T,U)オブジェクトTを説明する.オブジェクトRにUをマッピングするDoubleFunctionR Apply(2値)doubleをオブジェクトRのIntFutionR Apply(int Value)intにオブジェクトRにマッピングし、I n t o b l e FutionDoubleFunctionDoubleDoubleDoppleDouble(長値)をオブジェクトRにマッピングする
public class 함수형_인터페이스 {
    public static void main(String[] args) {
        Function<String, String> messageFunction = s -> {
            return "메세지 \""+s+"\"를 전송하였습니다.";
        };

        String message = "안녕하세요";
        System.out.println(messageFunction.apply(message));
    }
}
// 출력
// 메세지 "안녕하세요"를 전송하였습니다.
🛴 の最後の部分
初めて関数型インタフェースをアップロードしてからまたゆっくり勉強しました
例に直接符号化して整理してよく理解した.
苦労して正解を見つけてよかったですㅠㅠ
他に良い例やコードがあれば、さらに更新します!!
リファレンス
  • https://jogeum.net/18
  • https://cornswrold.tistory.com/306