エンターテイメント!!

遊戯王好きのJavaエンジニアのブログ。バーニングソウルを会得する特訓中。

OJCP11 Goldの関数インタフェースについての学習

OJCPの勉強で、一向に覚えられないからアウトプット

主な関数型インタフェース

インタフェース 戻り値型 メソッド
Supplier T get()
Consumer void accept(T)
BiConsumer<T,U> void accept(T, U)
Predicate boolean test(T)
BiPredicate<T,U> boolean test(T, U)
Function<T,R> R apply(T)
BiFunction<T,U,R> R apply(T, U)
UnaryOperator T apply(T)
BinaryOperator T apply(T, T)
Runnable void run()
Callable V call()
  • Supplier
  • Supplier = 供給
  • 値を提供してくれるのでgetterが定義されてる
  • Consumer
  • Consumer = 消費者
  • accept = 受け渡す
  • BiConsumer<T,U>は、引数2つ版
  • Predicate
  • 断定
  • 決定を下すのでbooleanが変える
  • BiPredicate<T,U>は、引数2つ版
  • Function<T,R>
  • 関数
  • apply = 作動させる
  • BiFunction<T,U,R>
  • UnaryOperator
  • Functionの派生。単項演算
  • BinaryOperator
  • Runnable
  • スレッドのやつ
  • Callable
  • 呼び出し

サンプル実装

Supplier

  public static void main(String[] args) {

    Supplier<String> supplier = () -> "Supplier";
    System.out.println(supplier.get());
  }
Consumer

Consumer

  public static void main(String[] args) {
    Consumer<String> consumer = (str) -> System.out.println(str);
    consumer.accept("Consumer");
  }

BiConsumer<T,U>

  public static void main(String[] args) {
    BiConsumer<String, Integer> consumer = (str, i) -> System.out.println(str + Integer.toString(i));
    consumer.accept("Consumer:", 123);
  }
Consumer:123

Predicate

  public static void main(String[] args) {
    Predicate<Object> predicate = (val) -> val == null;
    System.out.println(predicate.test(null));
  }
true

BiPredicate<T,U>

  public static void main(String[] args) {
    BiPredicate<Integer, String> predicate = (val1, val2) -> val1 == null && val2 == null;
    System.out.println(predicate.test(null, null));
  }
true

Function<T,R>

  public static void main(String[] args) {
    Function<Integer, String> function = (val) -> Integer.toString(val + 1);
    System.out.println(function.apply(150));
  }
151

BiFunction<T,U,R>

  public static void main(String[] args) {
    BiFunction<Integer, Long, String> function = (val1, val2) -> Long.toString(Long.valueOf(val1) + val2);
    System.out.println(function.apply(80, 71L));
  }
151

UnaryOperator

  public static void main(String[] args) {
    UnaryOperator<String> op = (str) -> str + "UnaryOperator";
    System.out.println(op.apply("test"));
  }
testUnaryOperator

BinaryOperator

  public static void main(String[] args) {
    BinaryOperator<Integer> op = (val1, val2) -> val1 == val2 ? 0 : 1;
    System.out.println(op.apply(1, 2));
  }
1

Runnable

  public static void main(String[] args) {
    Runnable r = () -> System.out.println("Runnable");
    r.run();
  }
Runnable

Callable

  public static void main(String[] args) throws Exception {
    Callable<String> cl = () -> "Callable";
    System.out.println(cl.call());
  }
Callable

Supplierと同じかと思ったが、パッケージが違うな。
concurrentだから、並列処理前提なのだろうか?