Consumer<T>和BiConsumer<T,U>
目录
前言
一 Consumer
1.1 源码
1.2 accept和andThen方法
1.2.1 accept(T t)方法
1.2.2 Consumer andThen(Consumer after)方法
二 BiConsumer,>
2.1 源码
前言
java sdk package: package java.util.function;
一 Consumer<T>
1.1 源码
注释翻译过来大致为:这个Consumer<T>接口表示(或者定义)了对输入参数的一系列处理规则,这个操作需要有一个输入参数,就是一个没有返回值的匿名函数。
/*** Represents an operation that accepts a single input argument and returns no* result. Unlike most other functional interfaces, {@code Consumer} is expected* to operate via side-effects.** <p>This is a <a href="package-summary.html">functional interface</a>* whose functional method is {@link #accept(Object)}.** @param <T> the type of the input to the operation** @since 1.8*/
public interface Consumer<T> {/*** Performs this operation on the given argument.** @param t the input argument*/// 将入参T,按照你定义的规则进行处理void accept(T t);/*** Returns a composed {@code Consumer} that performs, in sequence, this* operation followed by the {@code after} operation. If performing either* operation throws an exception, it is relayed to the caller of the* composed operation. If performing this operation throws an exception,* the {@code after} operation will not be performed.** @param after the operation to perform after this operation* @return a composed {@code Consumer} that performs in sequence this* operation followed by the {@code after} operation* @throws NullPointerException if {@code after} is null*/default Consumer<T> andThen(Consumer<? super T> after) {Objects.requireNonNull(after);return (T t) -> { accept(t); after.accept(t); };}
}
1.2 accept和andThen方法
1.2.1 accept(T t)方法
接收一个入参,按照定义的规则处理入参;
举例:
public static void main(String[] args) {String test1= "我";String test2= "你";String test3= "大家";StringBuilder builderInput = new StringBuilder("我要买");Consumer<String> consumer = (string)-> System.out.println(string + "爱中国");consumer.accept(test1);consumer.accept(test2);consumer.accept(test3);Consumer<StringBuilder> consumer2 = (builder)-> builder.append("玛莎拉蒂");System.out.println("accept前: "+builderInput.toString());consumer2.accept(builderInput);System.out.println("accept后: "+builderInput.toString());}
1.2.2 Consumer<T> andThen(Consumer<? super T> after)方法
多个Consumer的组合,定义的多个处理流程,链式化处理(流水线作业)。输入是一个规则,返回一个新的规则。
先判断入参的Consumer<? super T>after是不是null,为null会抛出空指针异常。然后,先执行Consumer自身定义的规则,最后执行输入的Consumer的规则。
default Consumer<T> andThen(Consumer<? super T> after) {Objects.requireNonNull(after);return (T t) -> { accept(t); after.accept(t); };
}public static void main(String[] args) {Consumer<StringBuilder> consumer1 = (builder)-> builder.append("->步骤1");Consumer<StringBuilder> consumer2 = (builder)-> builder.append("->步骤2");Consumer<StringBuilder> consumer3 = (builder)-> builder.append("->步骤3");Consumer<StringBuilder> newConsumer = consumer1.andThen(consumer2).andThen(consumer3);StringBuilder builder = new StringBuilder("原始原件");newConsumer.accept(builder);System.out.println(builder.toString());
}
1.3.3 其他Consumer
IntConsumer、DoubleConsumer以及LongConsumer等。
二 BiConsumer<T, U>
2.1 源码
和Consumer<T>的唯一区别,就是接收的入参是两个
public interface BiConsumer<T, U> {void accept(T t, U u);default BiConsumer<T, U> andThen(BiConsumer<? super T, ? super U> after) {Objects.requireNonNull(after);return (l, r) -> {accept(l, r);after.accept(l, r);};}
}
Consumer<T>和BiConsumer<T,U>相关推荐
- reactor官方文档译文(2)Reactor-core模块
You should never do your asynchronous work alone. - Jon Brisbin 完成Reactor 1后写到 You should never do y ...
- 摆脱冷气_摆脱匿名类
摆脱冷气 我真的很喜欢编写和阅读lambda表达式-它们简洁,富于表现力和时尚(来吧,这样就没关系了!). 将此与匿名类进行比较. 这就是为什么我喜欢摆脱它们! 在过去的几个月里,这种认识慢慢地实现了 ...
- Java8 通过foreach 遍历List,同时输出下标
定义lambada式工具类: import java.util.function.BiConsumer; import java.util.function.Consumer;public class ...
- Java8函数式接口与Lambda表达式
摘要 何为函数式接口? 什么是lambda表达式,lambda表达式的本质: 函数式接口与lambda表达式的联系:lambda是实现函数式接口的一个快捷方式,可以作为函数式接口的一个实例: 常用Ja ...
- Java闲杂笔记摘抄
以下内容不分先后顺序,均为个人学习期间做的笔记 方法设计 单元:一个类或者一组类(组件) 类采用名次结构 动词过去式+名次 ContextRefreshedEvent 动词ing + 名词 Initi ...
- 使用 Lambda 表达式的正确姿势,写得太好了叭
Lambda 表达式非常方便,在项目中一般在 stream 编程中用得比较多. List<Student> studentList = gen(); Map<String, Stud ...
- poi直接将excel出力为pdf或者text
基本有两种方法 1,利用VBS之类的脚本语言对装有OFFICE环境的Excel直接另存为PDF. 2,使用poi和itextpdf进行转换 下面是转载于https://github.com/nakaz ...
- Java新特性:Java8函数式接口与Lambda表达式(一)
摘要 何为函数式接口? 什么是lambda表达式,lambda表达式的本质: 函数式接口与lambda表达式的联系:lambda是实现函数式接口的一个快捷方式,可以作为函数式接口的一个实例: 常用Ja ...
- java lambda 是什么_自己理解Java中的lambda
lambda是什么 "Lambda 表达式"(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lam ...
- Java Lambda Consumer<T> BiConsumer DoubleConsumer IntConsumer LongConsumer ObjDoubleConsumer ObjLong
Java Lambda Consumer<T> BiConsumer DoubleConsumer IntConsumer LongConsumer ObjDoubleConsumer O ...
最新文章
- java 粒子系统_Java粒子系统(烟火篇)
- css中一些必要的公共样式
- android h5选择图片上传,js-微信H5选择多张图片预览并上传(兼容ios,安卓,已测试)...
- NUC1170 加农炮
- 【html笔记】html介绍和语法入门
- C/C++怎样传递二维数组,转载自CSDN
- Python3.4 枚举类型的使用
- 《概率论与数理统计》(浙大第四版)第一章总结笔记(纯手写)
- 2015年度APP分类
- Linux下常见的权限维持方式
- 【Dataset】GoEmotions: A Dataset of Fine-Grained Emotions
- c语言tap位置什么意思,CTAP是什么意思
- 微信template模板
- Unity 径向模糊 简易解决方案
- 前端js通过图片路径,展示图片
- Python递归学习6 涂格子问题
- 6.28(HTML2)
- 全志平台修改CPU频率方法
- 互联网公司各个岗位的薪资对比
- 漏刻有时API接口实战开发系列(13):小鹅通云服务PHP-API二维数组传参解决方案
热门文章
- python中类的命名规则_python命名规则
- 【OpenGL C++】一些常用的函数,如glMatrixMode() glTranslatef()glRotatef()gluLookAt()等
- 凌恩客户文献|宏基因组binning解析中国浓味白酒窖泥微生物群落MAGs和代谢潜力
- 视频一键发布多平台自媒体,让你轻松达到10W+
- 华为路由器AR1220E-S通过web页面不能登录
- 公司固定资产(车辆)处置的流程以及分录
- innblock 工具| InnoDB page观察利器
- Redis基本命令速查表
- 最新31个非常棒的 Photoshop 网页设计教程
- linux shell脚本 exit0,Bash exit命令和exit退出代码