JDK8日常开发系列:Consumer详解
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 Consumer andThen(Consumer<? super T> 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 Consumer andThen(Consumer<? super T> 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<T, U>
处理一个两个参数
- DoubleConsumer
处理一个double类型的参数
- IntConsumer
处理一个int类型的参数
- LongConsumer
处理一个long类型的参数
- ObjIntConsumer
处理两个参数,且第二个参数必须为int类型
- ObjLongConsumer
处理两个参数,且第二个参数必须为long类型
欢迎关注微信公众号,获取更多资源

JDK8日常开发系列:Consumer详解的更多相关文章
- C#二次开发BIMFACE系列61 File Management文件管理服务接口二次开发及实战详解
系列目录 [已更新最新开发文章,点击查看详细] 在我的博客<C#二次开发BIMFACE系列61 File Management文件管理服务接口二次开发及实战详解>最后列出了 Fil ...
- Linux驱动开发必看详解神秘内核(完全转载)
Linux驱动开发必看详解神秘内核 完全转载-链接:http://blog.chinaunix.net/uid-21356596-id-1827434.html IT168 技术文档]在开始步入L ...
- 反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑) C#中缓存的使用 C#操作redis WPF 控件库——可拖动选项卡的TabControl 【Bootstrap系列】详解Bootstrap-table AutoFac event 和delegate的分别 常见的异步方式async 和 await C# Task用法 c#源码的执行过程
反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑) 背景介绍: 为了平衡社区成员的贡献和索取,一起帮引入了帮帮币.当用户积分(帮帮点)达到一定数额之后,就会“掉落”一定数量的“帮帮 ...
- p2p网贷项目开发全过程技术详解,应用框架是ci2.2
p2p网贷项目开发全过程技术详解,应用框架是ci2.2 很标准的mvc开发代码,代码也很简单,方便二次开发 这篇文章会不断更新
- Spark Streaming揭秘 Day28 在集成开发环境中详解Spark Streaming的运行日志内幕
Spark Streaming揭秘 Day28 在集成开发环境中详解Spark Streaming的运行日志内幕 今天会逐行解析一下SparkStreaming运行的日志,运行的是WordCountO ...
- 【转】【Android UI设计与开发】之详解ActionBar的使用,androidactionbar
原文网址:http://www.bkjia.com/Androidjc/895966.html [Android UI设计与开发]之详解ActionBar的使用,androidactionbar 详解 ...
- VS2010开发程序打包详解
VS2010开发程序打包详解 转自:http://blog.sina.com.cn/s/blog_473b385101019ufr.html 首先打开已经完成的工程,如图: 下面开始制作安装程序包. ...
- SpringMVC【开发Controller】详解
前言 本文主要是讲解在Controller中的开发,主要的知识点有如下: 编码过滤器 使用注解开发 注解@RequestMapping详解 业务方法接收参数 字符串转日期 重定向和转发 返回JSON ...
- 【Android 应用开发】Ubuntu 下 Android Studio 开发工具使用详解 (旧版本 | 仅作参考)
. 基本上可以导入项目开始使用了 ... . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21035637 ...
随机推荐
- 简约清新日系你好五月通用PPT模板推荐
模版来源:http://ppt.dede58.com/peixunyanjiang/26488.html
- seaborn总结
Seaborn 数据可视化基础 介绍 Matplotlib 是支持 Python 语言的开源绘图库,因为其支持丰富的绘图类型.简单的绘图方式以及完善的接口文档,深受 Python 工程师.科研学者.数 ...
- Java日期处理组件joda-time
版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/175 Java日期处理组件joda-time 平常在开发过 ...
- PC/SC双界面读写器开发指南
友我科技PCSC双界面读写器YW-606开发指南 1.建立资源管理器的上下文 函数ScardEstablishContext()用于建立将在其中进行设备数据库操作的资源管理器上下文(范围). 函数原型 ...
- Redis之高可用、集群、云平台搭建(非原创)
文章大纲 一.基础知识学习二.Redis常见的几种架构及优缺点总结三.Redis之Redis Sentinel(哨兵)实战四.Redis之Redis Cluster(分布式集群)实战五.Java之Je ...
- Android获取实时连接热点的设备IP地址
因为最近玩树莓派,需要手机做热点,目前我发现的有两种办法 得到“已连接手机热点的设备的ip地址,推荐第二个办法,我最开始是第二个办法解决问题的, 第一个办法推测可行,但还未验证, 第一个办法需要手机有 ...
- Linxu:在Linux下访问Windows的共享目录
在 Windows xp 上设置一个共享目录 共享目录:d:\myfiles 在 Linux 下安装 samba-client 客户端 yum install samba-client 安装 cifs ...
- All 432 functions were compiled because no usable IPDB/IOBJ from previous compilation was found
解决方法: 将: 链接器——>优化——>链接时间代码生成——>使用快速链接时间代码生成(/LTCG:incremental). 改为: 链接器——>优化——>链接时间代码 ...
- 开发SSO单点登录需要注意的问题
一.单点登录系统开发需要注意的问题 1.单点登录系统需要支持jsonp请求? 单点登录系统主要是向其他系统提供用户身份验证服务,因此需要提供对外接口,而外部系统通过接口访问时,必然涉 ...
- path()函数
path()函数具有以下四个参数 route 必须 view 必须 kwargs 可选 name 可选 route route是一个匹配URL的准则(类似正则表达式) 当Django响应一个请求时,它 ...