Cou氏の徒然日記

ほのぼの日記ブログです。

Java の学習 (関数型インタフェース)

Java 

前回でラムダ式の基本について学習しました。

「関数型インタフェース」を用意して、その実装を書いて、それを呼び出すという形ですが、ラムダ式で記述すると、メソッド名も何でもよく、必要なのはインタフェースに渡す引数の型のみ。

そう考えると、「関数型インタフェース」は、「引数の数と型、戻り値の型」があっていれば何でも良いということになります。

 

そのためか、Java SEでは、よく使うだろう一般的なパターンの関数型インタフェースが用意されています。

★ Runnable インタフェース

Runnable (Java Platform SE 8)

  • 抽象メソッド: run( )
  • 引数:なし
  • 戻り値:なし (void)

★ Consumer インタフェース

Consumer (Java Platform SE 8)

  • 抽象メソッド: accept (T t)
  • 引数:1つ
  • 戻り値:なし (void)

★ BiConsumer インタフェース

BiConsumer (Java Platform SE 8)

  • 抽象メソッド: accept (T t, U u)
  • 引数:2つ
  • 戻り値:なし (void)

★ Predicate インタフェース

Predicate (Java Platform SE 8)

  • 抽象メソッド: test (T t)
  • 引数:1つ
  • 戻り値:boolean型

★ BiPredicate インタフェース

BiPredicate (Java Platform SE 8)

  • 抽象メソッド: test (T t, U u)
  • 引数:2つ
  • 戻り値:boolean型

 


もっと複雑な引数や戻り値の組み合わせの関数型インタフェースが必要になった場合は、自前で適当に用意すればよいので、大した問題でもないですが、上記のようなものは覚えておいても損ではないですね。

 

  Consumer<String> c0 = (s) -> System.out.println("test:" + s);
  c0.accept("c0");

  Consumer<Float> c1 = (j) -> System.out.println(j);
  c1.accept(4000f);

  BiConsumer <Integer, Integer> bc0 = (k,l) -> System.out.println(k*l);
  bc0.accept(500, 800);

  BiConsumer <Integer, String> bc1 = (m,n) -> {
      System.out.println(n + ":"+ m.toString());
  };
  bc1.accept(500, "XYZ");

  Predicate<String> p1 = (s1) -> s1.equals("AAA");
  if(p1.test("BBB")){
      System.out.println("YES");
  } else {
      System.out.println("No");
  }

 

このあたり、当時、妥協せずやっておけばよかったです。

わかってしまえば全然難しい内容ではなかったですので…。