jdk8-Consumer相關函數式接口


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM