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详解的更多相关文章

  1. C#二次开发BIMFACE系列61 File Management文件管理服务接口二次开发及实战详解

    系列目录     [已更新最新开发文章,点击查看详细] 在我的博客<C#二次开发BIMFACE系列61 File Management文件管理服务接口二次开发及实战详解>最后列出了 Fil ...

  2. Linux驱动开发必看详解神秘内核(完全转载)

    Linux驱动开发必看详解神秘内核 完全转载-链接:http://blog.chinaunix.net/uid-21356596-id-1827434.html   IT168 技术文档]在开始步入L ...

  3. 反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑) C#中缓存的使用 C#操作redis WPF 控件库——可拖动选项卡的TabControl 【Bootstrap系列】详解Bootstrap-table AutoFac event 和delegate的分别 常见的异步方式async 和 await C# Task用法 c#源码的执行过程

    反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑)   背景介绍: 为了平衡社区成员的贡献和索取,一起帮引入了帮帮币.当用户积分(帮帮点)达到一定数额之后,就会“掉落”一定数量的“帮帮 ...

  4. p2p网贷项目开发全过程技术详解,应用框架是ci2.2

    p2p网贷项目开发全过程技术详解,应用框架是ci2.2 很标准的mvc开发代码,代码也很简单,方便二次开发 这篇文章会不断更新

  5. Spark Streaming揭秘 Day28 在集成开发环境中详解Spark Streaming的运行日志内幕

    Spark Streaming揭秘 Day28 在集成开发环境中详解Spark Streaming的运行日志内幕 今天会逐行解析一下SparkStreaming运行的日志,运行的是WordCountO ...

  6. 【转】【Android UI设计与开发】之详解ActionBar的使用,androidactionbar

    原文网址:http://www.bkjia.com/Androidjc/895966.html [Android UI设计与开发]之详解ActionBar的使用,androidactionbar 详解 ...

  7. VS2010开发程序打包详解

    VS2010开发程序打包详解 转自:http://blog.sina.com.cn/s/blog_473b385101019ufr.html 首先打开已经完成的工程,如图: 下面开始制作安装程序包. ...

  8. SpringMVC【开发Controller】详解

    前言 本文主要是讲解在Controller中的开发,主要的知识点有如下: 编码过滤器 使用注解开发 注解@RequestMapping详解 业务方法接收参数 字符串转日期 重定向和转发 返回JSON ...

  9. 【Android 应用开发】Ubuntu 下 Android Studio 开发工具使用详解 (旧版本 | 仅作参考)

    . 基本上可以导入项目开始使用了 ... . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21035637 ...

随机推荐

  1. automaticallyAdjustsScrollViewInsets

    参考链接: https://www.jianshu.com/p/a1987a7c11ba

  2. electron打包出现有文件下载不全的情况

    1.根据提示下载相应的东西 https://blog.csdn.net/az44yao/article/details/85242442 具体可以看这个链接 2.有个小坑,如果到了按照链接1的过程,遇 ...

  3. Azkaban(3.x)编译安装使用

    官网地址:https://azkaban.readthedocs.io Azkaban 有三种部署方式:单服务模式.2个服务模式.分布式多服务模式 简单实用仅需单服务模式即可 2个服务模式,需要配置m ...

  4. 使用bean接收ajax表单提交数据包含文件上传

    这几天写带图片上传的表单提交,一个配置小程序活动弹出框样式的功能,记录一下一些需要注意的地方 首先是 前端 JSP 文件的表单 <form class="search-wrapper& ...

  5. Flask框架后端开发常见错误处理

    1.ValueError: urls must start with a leading slash 这个错误原因可能发生在所有路由相关地方,少加了一个'/'造成的. 2.ImportError: c ...

  6. Internet Download Manager是什么?

    在互联网下载管理器(也被称为IDM)是一款共享软件下载管理器,这意味着你可以下载该程序,并尝试它的试用期内免费. 以下是IDM最佳功能的列表: 支持多种浏览器和应用程序 一键下载文件 内置防病毒检查 ...

  7. 10. java 匿名对象说明

    一.匿名对象 public class Demo{ public static void main(String[] args){ Person one = new Person(); one.nam ...

  8. sql server 2008清除日志

    先改成简单模式,再清除日志,再改回原来模式 USE [oms20190322]GOALTER DATABASE oms20190322 SET RECOVERY SIMPLE WITH NO_WAIT ...

  9. HTML页面导入模板页面(Tomcat)

    找了个前端模板,多个HTML中有重复的部分,一改都改,所以对其进行重构,将重复的部分拿出来 看了很多方法,最简单的是jQuery,但是在我这没起作用,后来发现一个配置tomcat的ssi,让服务器帮我 ...

  10. Luogu P5408 【模板】第一类斯特林数·行

    为什么要做这题呢,当然是有用啊qwq 首先我们考虑非常经典的式子: \[x^{\overline{n}}=\sum_i \left[^n_i\right] x^i\] 然后上倍增: \[x^{\ove ...