JAva 8-javaが提供する関数インタフェース

6918 ワード

Java内蔵の関数インタフェース


  • Function

  • Tタイプを受信し、Rタイプの関数インタフェースを返す
  • R apply(T t)

  • 関数の組合せ方法
  • andThen
  • compose

  • BiFunction

  • 2つのタイプ(T、U)を受信し、Rタイプを返す関数インタフェース.
  • R apply(T t, U u)

  • Consumer

  • Tタイプを受け入れ、値を返さない関数インタフェース
  • void Accept(T t)

  • 関数の組合せ方法
  • andThen

  • Supplier

  • Tタイプ値を提供する関数インタフェース
  • T get()

  • Predicate

  • Tタイプを受信しbooleanの関数インタフェースに戻る
  • boolean test(T t)

  • 関数の組合せ方法
  • And
  • Or
  • Negate

  • UnaryOperator:Functionの特殊な形式の関数インタフェースで、入力値を受信し、同じタイプを返します.

  • BinaryOperator:BiFunctionの特殊な形式で、同じタイプの2つの入力値を受け入れて戻ります.
  • Function<T,R>


    インタフェース
  • T(Parameter)は、R値を返す
    public class Plus10 implements Function<Integer, Integer> {
        
        @Override
        public Integer apply(Integer integer) {
            return integer + 10;
        }
    }
    public class Plus {
    
    
        public static void main(String[] args) {
            Plus10 plus10 = new Plus10();
            plus10.apply(1);
        }
    }
    使用可能
    public class Plus {
    
    
        public static void main(String[] args) {
            Function<Integer, Integer> plus10 = (i) -> i + 10;
            plus10.apply(1);
        }
    }
    上記のように個別のクラスを作成する必要はなく、ramda形式で使用できます.
    そして,Functionのcompose()関数を用いて,以下のようにラムダ式を統合することができる.
    public class Plus {
    
    
        public static void main(String[] args) {
            Function<Integer, Integer> plus10 = (i) -> i + 10;
            Function<Integer, Integer> multiply2 = (i) -> i* 2;
    
            Function<Integer, Integer> multiply2AndPlus10 = plus10.compose(multiply2);
            multiply2AndPlus10.apply(2);
        }
    }
    
    ドゥラム茶食を加えた+10.compose(multiply 2)関数は、変数値がX 2の後に10を加えた関数です.
    これに対し、AndThen()関数はcompose()関数とは逆に、10を加算し、X 2を加算する関数です.
    public class Plus {
    public static void main(String[] args) {
        Function<Integer, Integer> plus10 = (i) -> i + 10;
        Function<Integer, Integer> multiply2 = (i) -> i* 2;
    
        Function<Integer, Integer> multiply2AndPlus10 = plus10.compose(multiply2);
        System.out.println("multiply2AndPlus10.apply(2) = " + multiply2AndPlus10.apply(2));
    
        Function<Integer, Integer> plus10AndMultiply2 = plus10.andThen(multiply2);
        System.out.println("plus10AndMultiply2.apply(2) = " + plus10AndMultiply2.apply(2));
        
    }
    }

    BiFuntion(T,U,R)


    この関数はFunctionに変数値を1つだけ追加します.
  • Consumer<T>

  • この関数は、戻りタイプのインタフェースがありません.
  • public class Consume {
    
        public static void main(String[] args) {
            Consumer<String> printT = (s) -> System.out.println(s);
            printT.accept("Hello");
        }
    }

    Supplier<T>

  • 任意の値を入力インタフェース(パラメータを受け入れない)
  • public class Supply {
    
        public static void main(String[] args) {
            Supplier<Integer> get10 = () -> 10;
            get10.get();
        }
    }

    Predicate<T>

  • Tタイプ、真偽を区別するインタフェース
  • public class Predict {
    
        public static void main(String[] args) {
            Predicate<String> startsWithHyunSik = (s) -> s.startsWith("hyunsik");
            Predicate<Integer> isOdd = (i) -> i % 2 == 1;
    
            System.out.println("startsWithHyunSik.test(\"hyunsikYoon\") = " + startsWithHyunSik.test("hyunsikYoon"));
    
            System.out.println("isOdd.test(4) = " + isOdd.test(4));
            
        }
    }

    UnaryOperator<T>

    //        Function<Integer, Integer> plus10 = (i) -> i + 10;
            UnaryOperator<Integer> plus10 = (i) -> i + 10;
    入力タイプが戻りタイプと同じ場合は、UnaryOperatorを使用して置き換えることができます.

    BinaryOperator<T>


    2つの
  • 入力タイプと1つの戻りタイプが同じ場合は、BinaryOperatorで置き換えることができます.