Supplier

ファンクショナルインターフェース

Suppiler 引数なし・戻り値あり。
getメソッドのみ定義されている。
プリミティブ型用にBooleanSupplier, IntSupplier, LongSupplier, DoubleSupplierが用意されている。

関数を変数のように扱える。

// Lambda式でパラメータが0個の場合は括弧を省略できない。
Supplier<Object> sp = () -> LocalDateTime.now().plusHours(-8); 
System.out.println(sp.get()); //2019-07-06T07:03:53.413
Thread.sleep(10000); // 10秒間スリープ。
System.out.println(sp.get()); //2019-07-06T07:04:03.420

関数をパラメータのように渡せる。

public void doTest1() {
    Supplier<String> mydate = () -> new SimpleDateFormat("yyyyねんMMがつddにちですよ").format(new Date());
    doTest1Re(mydate);
}
public void doTest1Re(Supplier<String> mydate) {
    System.out.println(mydate.get());
}

プリミティブ型での使用例。

BooleanSupplier csIsMonday = () -> Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY;
System.out.println(csIsMonday.getAsBoolean());
		
IntSupplier csYear = () -> Calendar.getInstance().get(Calendar.YEAR);
System.out.println(csYear.getAsInt());
		
LongSupplier csYearSquare = () -> Calendar.getInstance().get(Calendar.YEAR) * Calendar.getInstance().get(Calendar.YEAR);
System.out.println(csYearSquare.getAsLong());
		
DoubleSupplier csYearPI = () -> Calendar.getInstance().get(Calendar.YEAR) * Math.PI;
System.out.println(csYearPI.getAsDouble());

メソッド参照での使用例

Supplier<Object> cs = Instant::now;
System.out.println(cs.get());

 

投稿日: