概要
Supplierとは供給者という意味です。
その名の通り、引数を取らずに戻り値を受け取ります。
基本的な使い方
Supplier<T>
getメソッドによってT型の結果を受け取ります。
1 2 3 4 5 6 7 |
// get Supplier<Integer> supllier = () -> Integer.valueOf(10); System.out.println(supllier.get()); // 10 |
implementsする場合
Supplierを実装して、getメソッドをオーバライドすることによって独自のSupllierを定義できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
public class Count implements Supplier<Set<Integer>> { @Override public Set<Integer> get() { return new HashSet(Arrays.asList(1,2,3,4,5,6,7,8,9,10)); } } public class MainSullpier { public static void main(String[] args) { Count count = new Count(); System.out.println(count.get()); } } // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] |
匿名クラスで使用する場合
匿名クラスとは、使い捨てのクラス宣言です。
クラスをその場限りで定義して使用します。
Suplierのgetメソッドを匿名クラスで都度オーバライドした場合の例です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Set<Integer> count= new Supplier<Set<Integer>>() { @Override public Set<Integer> get() { return new HashSet(Arrays.asList(1,2,3,4,5,6,7,8,9,10)); } }.get(); System.out.println(count); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] Set<Integer> otherCount = new Supplier<Set<Integer>>() { @Override public Set<Integer> get() { return new HashSet(Arrays.asList(10,20,30,40,50,60,70,80,90,100)); } }.get(); System.out.println(otherCount); // [80, 50, 20, 100, 70, 40, 10, 90, 60, 30] |
匿名クラスは都度定義できるのがメリットであり、これは関数型インターフェースと相性が良い部分でもあります。
特殊化されたその他のインターフェース
Supplierには以下の特殊化されたインターフェースが用意されています。
- BooleanSupplier :boolean値の結果のサプライヤを表します。
- DoubleSupplier :double値の結果のサプライヤを表します。
- IntSupplier :int値の結果のサプライヤを表します。
- LongSupplier :long値の結果のサプライヤを表します。
特定の値を返したいという場合、これらのインターフェースを使用するとよいでしょう。
まとめ
- Supplierは引数を取らず、値を返す関数型インターフェースである。
- クラスにimplementsしたり、匿名クラスとして利用可能である。
参考情報
Oracle – パッケージjava.util.function
Oracle – インタフェースSupplier<T>