1. 程式人生 > >jdk8-Consumer接口

jdk8-Consumer接口

code 源代碼 相關 link mit 方法 oid rim 一個

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相關的函數式接口,只有這8個。按參數個數分為兩種,每種又有三個原始類型的特殊實現,使用原始類型的相關實現,效率會高一點。

jdk8-Consumer接口