Lambda之Consumer

特質

消費者模式,接收1個或多個參數,進行邏輯處理,無返回值。

測試

測試數據

@Data
public static class Foo {
	String strVal = "Hello";
	 int intVal = 1;
	 Double doubleVal = 2.0;
	 Long longVal = 3L;
	 Boolean trueVal = true;

	String strTmp;
	int intTmp = 1;
	Double doubleTmp;
	Long longTmp;
}

萬能型Consumer

可以指定類型,最常用。

Consumer<String> consumer =  foo::setStrTmp;
consumer.accept(foo.strVal);
assertEquals(foo.strVal, foo.strTmp);

固定類型Consumer

提供了已經確定類型的Consumer,使用時不需要再指定泛型類型

DoubleConsumer doubleConsumer =  foo::setDoubleTmp;
doubleConsumer.accept(foo.doubleVal);
assertEquals(foo.doubleVal, foo.doubleTmp);

IntConsumer intConsumer =  foo::setIntTmp;
intConsumer.accept(foo.intVal);
assertEquals(foo.intVal, foo.intTmp);

LongConsumer longConsumer =  foo::setLongTmp;
longConsumer.accept(foo.longVal);
assertEquals(foo.intVal, foo.intTmp);

萬能型數據操作Consumer

可以傳入2個參數,進行數據操作。

BiConsumer<String, String> biConsumer = (left, right) -> foo.strTmp = left + " " + right;
biConsumer.accept("Hello", "BiConsumer");
assertEquals("Hello BiConsumer", foo.strTmp);

固定類型操作Consumer

同樣允許傳入2個參數,不需要額外指定類型,需要注意的是,類型傳入順序和對應consumer命名保持一致。

ObjDoubleConsumer<Foo> objDoubleConsumer = (left, right) -> foo.strTmp = left.strVal + " " + right;
objDoubleConsumer.accept(foo, 1.23);
assertEquals(foo.strVal + " 1.23", foo.strTmp);

ObjIntConsumer<Foo> objIntConsumer = (left, right) -> foo.intTmp = left.intVal + right;
objIntConsumer.accept(foo,2);
assertEquals(3, foo.intTmp);

ObjLongConsumer<Foo> objLongConsumer = (left, right) -> foo.longTmp = left.longVal + right;
objLongConsumer.accept(foo,2L);
assertEquals(5, foo.longTmp.longValue());
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章