Consumer的作用是給定義一個參數,對其進行(消費)處理,處理的方式可以是任意操作.
源代碼如下:
Consumer<T> void accept(T t);
default Consumer<T> andThen(Consumer<? super T> after);
andThen方法返回一個Consumer,以便於鏈式操作,值得注意的是,andThen方法是建立在accept基礎之上的。執行的順序是先執行accept,再執行andThen操作。
accept示例:
Consumer<Person> consumer = (p) -> System.out.println(p.getFirstName());//定義消費行為
consumer.accept(Person.builder().firstName("zs").build());//執行消費行為
andThen示例:
Consumer<Person> consumer = (p) -> System.out.println(p.getFirstName()); consumer.andThen((p) -> System.out.println(p.getLastName())).accept(Person.builder().firstName("san feng").lastName("zhang").build());
Consumer有相關的原始類型實現,是Consumer的特例(This is the primitive type specialization of{@link Consumer} for {@code double}.)
相關的實現有三個IntConsumer,LongConsumer,DoubleConsumer.
accept示例:
DoubleConsumer doubleConsumer = (d) -> System.out.println(d);
doubleConsumer.accept(23.2d);
BiConsumer是對兩個參數進行消費.
accept示例:
BiConsumer<String, Person> biConsumer = (str, p) -> System.out.println(str + p.getFirstName());
biConsumer.accept("hello ", Person.builder().firstName("san feng").lastName("zhang").build());
BiConsumer的原始類型實現也有三個,ObjIntConsumer,ObjLongConsumer,ObjDoubleConsumer
accept示例:
ObjIntConsumer<Person> objIntConsumer = (Person ps, int i) -> {
ps.setAge(i);
System.out.println(ps.getFirstName()+":"+ps.getAge());
};
objIntConsumer.accept(Person.builder().firstName("san feng").lastName("zhang").build(), 300);
Consumer常用方式:
public static void main(String[] args) {
Consumer<Person> consumer1 = (p) -> System.out.println(p.getFirstName()); Consumer<Person> consumer2 = (p) -> System.out.println(p.getLastName()); Person p=Person.builder().firstName("san feng").lastName("zhang").build(); System.out.println("===========testConsumer start================"); testConsumer(p,consumer1.andThen(consumer2)); System.out.println("============testConsumer end==============="); }
public static void testConsumer(Person p, Consumer<Person> c) { c.accept(p); }
輸出:
===========testConsumer start================ san feng zhang ============testConsumer end===============
Consumer相關的函數式接口,只有這8個。按參數個數分為兩種,每種又有三個原始類型的特殊實現,使用原始類型的相關實現,效率會高一點。