前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JDK8日常开发系列:Consumer详解

JDK8日常开发系列:Consumer详解

作者头像
程序员小明
发布2019-07-17 10:56:37
9470
发布2019-07-17 10:56:37
举报
文章被收录于专栏:程序员小明程序员小明
点击上方“程序员小明”,选择“星标”今晚可以不加班!java.util.function中 Function, Supplier, Consumer, Predicate和其他函数式接口广泛用在支持lambda表达式的API中。这些接口有一个抽象方法,会被lambda表达式的定义所覆盖。Consumer的作用顾名思义,是给定义一个参数,对其进行(消费)处理,处理的方式可以是任意操作。@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);
对给定的参数T执行定义的操作default ConsumerandThen(Consumer after)
对给定的参数T执行定义的操作执行再继续执行after定义的操作下面对上述方法进行实例测试:accept(T t)比如将给定的一批用户里面的名称为"lisi"的用户都给打包起来/**
 * 此处使用lombok插件(值得了解)
 */
@Data
@Accessors(chain = true)
@AllArgsConstructor
public class Person {
    private Integer age;
    private String name;
}

List<Person> lisiList = new ArrayList<>();
Consumer<Person> consumer  = x -> {
    if (x.getName().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));
结果为:[{"age":22,"name":"lisi"},{"age":23,"name":"lisi"},{"age":26,"name":"lisi"}]
default ConsumerandThen(Consumer after)比如将给定的一批用户里面的名称为"lisi"且年龄大于22岁的用户都给打包起来List<Person> lisiList = new ArrayList<>();
Consumer<Person> consumer  = x -> {
    if (x.getName().equals("lisi")){
        lisiList.add(x);
    }
};
consumer = consumer.andThen(
        x -> lisiList.removeIf(y -> y.getAge() < 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));
}
结果为:[{"age":23,"name":"lisi"},{"age":26,"name":"lisi"}]
与Consumer相关的接口BiConsumer处理一个两个参数DoubleConsumer处理一个double类型的参数IntConsumer处理一个int类型的参数LongConsumer处理一个long类型的参数ObjIntConsumer处理两个参数,且第二个参数必须为int类型ObjLongConsumer处理两个参数,且第二个参数必须为long类型欢迎在评论区留下你的观点,一起讨论提高。

如果今天的文章让你有新的启发,或者在学习能力的提升上有新的认识,欢迎转发分享给更多人。欢迎各位读者加入程序员小明读者群,在公众号后台回复“报道”或者“学习”即可。

猜你还想看
最容易被问到的N种排序算法!显卡,就是一个男人对自己的交待教妹学 Java:动态伴侣 Groovy
在 Spring Boot 项目中使用 Swagger 文档
JDK8之Optional 的正确使用姿势
Linux(Centos版本)如何快速安装docker
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员小明 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档