【Java】関数型インターフェースのUnaryOperatorとは?

Java

UnaryOperatorやBinaryOperatorという関数型インターフェースが存在することをご存じでしょうか?

機能としては以前ご紹介したFunctionやBiFunctionと似たものとなっていて、引数を受け取り、戻り値を返すといったものです。

ではどういった違いがあるのか?

それについてこの記事では解説していきます。

UnaryOperatorとは?

まずUnaryOperatorですが、こちらはFunctionの特色を受け継いだものとなっています。

事実Functionのサブインターフェースとなっていて、引数を1つ取得して戻り値を戻すというものです。

ではFunctionとはどういった点で異なるかというとUnaryOperatorは引数・戻り値ともに同様の型を定義する必要があるというものです。

下記がUnaryOperatorを使用したコードとなります。

【コード】
import java.util.function.UnaryOperator;

public class UnaryOperator1 {

	public static void main(String[] args) {
		UnaryOperator<Integer> uo = a -> a * 10;
		System.out.println(uo.apply(10));
	}

}
【実行結果】
100

見ていただいたら分かる通りUnaryOperatorの右隣に記載しているダイヤモンド演算子内に記載されている型はIntegerの1つだけです。

Functionの際は引数と戻り値の2つの型が定義されていました。

しかしUnaryOperatorでは引数も戻り値も同様の型となるため、記載するのは一つだけでいいのです。

そして使用しているメソッドもFunctionと同様のapplyのため、Functionを理解していたらそこまで難しいものではありません。

引数と戻り値が異なる場合はFunctionを使用して、同様のモノを使用するとなった場合はUnaryOperatorを使用するようにしたら効率的です。

BinaryOperatorとは?

次にBinaryOperatorについてですが、こちらはBiFunctionを基にして作られたものとなっています。

機能は2つの引数を指定して、戻り値を戻すというBiFunctionと同じものとなっています。

BiFunctionと異なる点としては、UnaryOperatorと同様型は引数も戻り値も同様のモノを使用する必要があります。

実際のコードが下記となります。

【コード】
import java.util.function.BinaryOperator;

public class BinaryOperator1 {
	public static void main(String[] args) {
		BinaryOperator<Boolean> bo = (more,evennumber) -> more && evennumber;
		int a=112;
		boolean more = false;
		boolean evennumber = false;
		if (a > 100) {
			more = true;
		}
		if (a % 2 == 0) {
			evennumber = true;
		}
		if (bo.apply(more, evennumber)) {
			System.out.println(a+"は100以上の偶数です");
		} else {
			System.out.println(a+"は100以上の偶数ではありません");
		}
	}
}
【実行結果】
112は100以上の偶数です

上記は100以上の偶数値であるかどうかを判断するコードです。(「どこで使うんだよ」という声が聞こえそうですが・・・)

引数はBoolean型を渡していて、戻り値も同様のBoolean型となっています。

引数自体は2つありますが、どちらもBoolean型となっています。

BinaryOperatorの右横のダイヤモンド演算子にはBoolean型しか記載されていません。

BiFunctionでは引数2つ、戻り値1つの型をすべて記載する必要がありましたが、そういったことがなくコードを記載するのも楽ですし、見た目がとてもスッキリしたものとなっています。

そしてBinaryOperatorはFunction、BiFunction、UnaryOpeartor同様applyメソッドを使用しています。

これらはセットで覚えることをオススメします。

引数・戻り値が異なる場合はBiFunctionを使用して、異なる場合はBinaryOperatorを使用することで使い分けをしてみてはどうでしょうか。

まとめ

この記事ではJavaの関数型インターフェースのUnaryOperatorとBinaryOperatorについて解説してきました。

  • UnaryOperatorとは?
  • BinaryOperatorとは?

UnaryOperatorは引数1つを受け取り、戻り値1つ返す関数型インターフェースで、引数・戻り値ともに同様のデータ型を使用します。

そしてBinaryOperatorは引数2つを受け取り、戻り値を1つ戻る関数型インターフェースで、こちらも引数・戻り値は同様のデータ型を使用します。

UnaryOperatorはFunctionのサブインターフェースで、BinaryOperatorはBiFunctionのサブインターフェースとなっています。

使用するメソッドもすべて同様のapplyとなっていることから、これらの4つのインターフェースを一度に覚えてもいいかもしれません。

以上で今回の解説は終了となります。

コメント

タイトルとURLをコピーしました