3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

初心者でもわかる関数型インターフェース(UnaryOperator編)

Posted at

##はじめに
皆さんはUnaryOperatorについてご存知でしょうか。UnaryOperatorを使用すれば、一律の処理をキュッとまとめることが出来ます。例えば、リストの文字列を全て大文字にするなど使い方次第で色々なことが出来ます。JavaGoldの試験の出題範囲でもあります。そんな、UnaryOperatorについて解説していきます。

##UnaryOperatorとは
UnaryOperatorとは、1つの値を処理して同じ型の処理を戻す処理を表す関数型インターフェースです。例えば、String型の引数を受け取ったら、戻り値もString型の処理を戻すというイメージです。UnaryOperatorは、Funcitionインターフェースのサブクラスで、抽象メソッドであるapplyメソッドを実装しています。それでは、サンプルコードを通して、使い方を解説していきます。

##どのように使うの?
以下のコードは、String型の引数を受け取ってその引数に変数strを加える処理です。
そしてapplyメソッドを使用して、UnaryOperatorで実装した処理を呼び出します。

Sample.java
public class Sample {
	public static void main(String[] args) {
		String str = "さん、こんにちは";
		UnaryOperator <String> s = x -> x.concat(str);
		System.out.println(s.apply("佐藤"));
	}
}

##BinaryOperatorとは
UnaryOperatorでは1つの引数を受け取っていたのに対して、BinaryOperatorは2つの引数を受け取って、引数と同じ型の処理を戻します。

##どのように使うの?
OperatorFactoryクラスで、addメソッドとminusメソッドを作成しています。
このように、処理をまとめておくと再利用性が高くなります。

OperatorFactory.java
import java.util.function.BinaryOperator;

public class OperatorFactory {
	public static BinaryOperator<Integer> add(){
		return (a,b) -> a+b;
	}

	public static BinaryOperator<Integer> minus(){
		return (a,b) -> a-b;
	}
}

OperatorFactoryで作成したaddメソッドを変数opに代入して、applyメソッドで呼び出しています。

Sample.java
import java.util.function.BinaryOperator;

public class Sample {
	public static void main(String[] args) {
		BinaryOperator<Integer> op = OperatorFactory.add();
		System.out.println(op.apply(10,20));
	}
}

##まとめ
UnaryOperatorとは、1つの値を処理して同じ型の処理を戻す関数型インターフェース
BinaryOperatorは2つの引数を受け取って、引数と同じ型の処理を戻す関数型インターフェース

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?