Consumer詳解

java.util.function中 Function, Supplier, Consumer, Predicate和其他函數(shù)式接口廣泛用在支持lambda表達(dá)式的API中。這些接口有一個抽象方法,會被lambda表達(dá)式的定義所覆蓋。

Consumer的作用顧名思義,是給定義一個參數(shù),對其進(jìn)行(消費)處理,處理的方式可以是任意操作.

@FunctionalInterface
public interface Consumer<T> {

    void accept(T t);

    default Consumer<T> andThen(Consumer<? super T> after) {
        Objects.requireNonNull(after);
        return (T t) -> { accept(t); after.accept(t); };
    }
}

其核心方法如下:

  • void accept(T t);

    對給定的參數(shù)T執(zhí)行定義的操作

  • default Consumer<T> andThen(Consumer<? super T> after)

    對給定的參數(shù)T執(zhí)行定義的操作執(zhí)行再繼續(xù)執(zhí)行after定義的操作

下面對上述方法進(jìn)行實例測試:

accept(T t)

比如將給定的一批用戶里面的名稱為"lisi"的用戶都給打包起來

  List<Person> lisiList = new ArrayList<>();
        Consumer <Person> consumer  =  x -> {
            if (x.name.equals("lisi")){
                lisiList.add(x);
            }
        };
        Stream.of(
                new Person(21,"zhangsan"),
                new Person(22,"lisi"),
                new Person(23,"wangwu"),
                new Person(24,"wangwu"),
                new Person(23,"lisi"),
                new Person(26,"lisi"),
                new Person(26,"zhangsan")
        ).forEach(consumer);

        System.out.println(JSON.toJSONString(lisiList));

結(jié)果為:

[{"age":22,"name":"lisi"},{"age":23,"name":"lisi"},{"age":26,"name":"lisi"}]

default Consumer<T> andThen(Consumer<? super T> after)

比如將給定的一批用戶里面的名稱為"lisi"且年齡大于22歲的用戶都給打包起來

 List<Person> lisiList = new ArrayList<>();
        Consumer <Person> consumer  =  x -> {
            if (x.name.equals("lisi")){
                lisiList.add(x);
            }
        };

        consumer = consumer.andThen(
           x -> lisiList.removeIf(y -> y.age < 23)
        );

        Stream.of(
                new Person(21,"zhangsan"),
                new Person(22,"lisi"),
                new Person(23,"wangwu"),
                new Person(24,"wangwu"),
                new Person(23,"lisi"),
                new Person(26,"lisi"),
                new Person(26,"zhangsan")
        ).forEach(consumer);

        System.out.println(JSON.toJSONString(lisiList));

結(jié)果為:

[{"age":23,"name":"lisi"},{"age":26,"name":"lisi"}]

與Consumer<T>相關(guān)的接口

  • BiConsumer<T, U>

    處理一個兩個參數(shù)

  • DoubleConsumer

    處理一個double類型的參數(shù)

  • IntConsumer

    處理一個int類型的參數(shù)

  • LongConsumer

    處理一個long類型的參數(shù)

  • ObjIntConsumer<T>

    處理兩個兩個參數(shù),且第二個參數(shù)必須為int類型

  • ObjLongConsumer<T>

    處理兩個兩個參數(shù),且第二個參數(shù)必須為long類型

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容