概要
Consumer<T>は消費者と呼ばれる関数型インターフェースで、acceptメソッドを持ちます。
消費者というだけあって戻り値がありません。
また、引数はT型を1つとります、
基本的な使い方
関数型インターフェースはラムダ式またはメソッド参照を使うことができます。
ラムダ式
String型の引数を1つとる例です。
1 2 |
Consumer<String> consumer = str -> System.out.println("lamda : " + str); consumer.accept("AAA"); |
実行結果
1 |
lamda : AAA |
メソッド参照
メソッド参照は最後のメソッドの手前に「::」を置きます。
()は不要で引数も与えないため、ラムダ式のように「str -> 」という変数名とアロー演算子も不要です。
1 2 3 |
//accept Consumer<String> referer = System.out::println; referer.accept("AAA"); |
実行結果
1 |
AAA |
匿名クラス
ラムダ関数は匿名クラスとしても利用できます。
匿名クラスは、その場で定義して使いたいように一時的に定義できるクラスです。
1 2 3 4 5 6 7 |
Consumer<String> anonymous = new Consumer<String>(){ @Override public void accept(String t) { System.out.println("anonymous : "+ t); } }; anonymous.accept("AAA"); |
実行結果
1 |
anonymous : AAA |
その他のメソッド
andThen
Consumerを繋げて処理することができるメソッドです。
andThenでつながっている左辺から順に実行されます。
1 2 3 4 |
Consumer<String> one = str -> System.out.println("one colled -> " + str); Consumer<String> two = str -> System.out.println("two colled -> " + str); Consumer<String> three = str -> System.out.println("three colled -> " + str); one.andThen(two).andThen(three).accept("BBB"); |
実行結果
1 2 3 |
one colled -> BBB two colled -> BBB three colled -> BBB |
特殊化されたインターフェース
2つの引数を指定する
BiConsumer<T,U>
T – 第1引数の型
U – 第2引数の型
Consumerを特殊化して引数を2個取るようにしたものです
1 2 3 4 5 6 7 |
//BiConsumer BiConsumer<String, Object[]> textFomat = (format, nums) -> System.out.println(String.format(format, nums)); String numberFormat = "weight = %.2f, height = %.2f"; Double[] values = {60.5, 180.5}; textFomat.accept(numberFormat, values); |
実行結果
1 |
weight = 60.50, height = 180.50 |
プリミティブ型の引数を指定する
IntConsumer
Consumerに対してint型に特殊化したインターフェースです。
単一のint値引数を受け取って結果を返さないオペレーション(void型)を表します。
1 2 3 |
IntConsumer intConsumer = System.out::println; intConsumer.accept(2_147_483_647); // int上限 intConsumer.accept(-2_147_483_648); // int下限 |
実行結果
1 2 |
2147483647 -2147483648 |
他にも、以下があります。
DoubleConsumer
LongConsumer
オブジェクト型とプリミティブ型の引数を指定する
ObjIntConsumer<T>
T -オブジェクト引数の型
※ジェネリクスにプリミティブ型は使えないため指定なし
1 2 3 |
ObjIntConsumer<String> strAndInt = (str, num) -> System.out.println(str + " , " + num); strAndInt.accept("string", 100); |
実行結果
1 |
string , 100 |
他にも、以下があります。
ObjDoubleConsumer
ObjLongConsumer
まとめ
- Consumerは引数1つを取り、戻り値のない関数型インターフェースである。
- 複数のConsumerに対して1つの引数をandThenメソッドで連続して処理することができる。
- 特殊化されたインターフェースが用意されており、それぞれの用途で使うことができる。
コメント