目录

前言

一  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>相关推荐

  1. reactor官方文档译文(2)Reactor-core模块

    You should never do your asynchronous work alone. - Jon Brisbin 完成Reactor 1后写到 You should never do y ...

  2. 摆脱冷气_摆脱匿名类

    摆脱冷气 我真的很喜欢编写和阅读lambda表达式-它们简洁,富于表现力和时尚(来吧,这样就没关系了!). 将此与匿名类进行比较. 这就是为什么我喜欢摆脱它们! 在过去的几个月里,这种认识慢慢地实现了 ...

  3. Java8 通过foreach 遍历List,同时输出下标

    定义lambada式工具类: import java.util.function.BiConsumer; import java.util.function.Consumer;public class ...

  4. Java8函数式接口与Lambda表达式

    摘要 何为函数式接口? 什么是lambda表达式,lambda表达式的本质: 函数式接口与lambda表达式的联系:lambda是实现函数式接口的一个快捷方式,可以作为函数式接口的一个实例: 常用Ja ...

  5. Java闲杂笔记摘抄

    以下内容不分先后顺序,均为个人学习期间做的笔记 方法设计 单元:一个类或者一组类(组件) 类采用名次结构 动词过去式+名次 ContextRefreshedEvent 动词ing + 名词 Initi ...

  6. 使用 Lambda 表达式的正确姿势,写得太好了叭

    Lambda 表达式非常方便,在项目中一般在 stream 编程中用得比较多. List<Student> studentList = gen(); Map<String, Stud ...

  7. poi直接将excel出力为pdf或者text

    基本有两种方法 1,利用VBS之类的脚本语言对装有OFFICE环境的Excel直接另存为PDF. 2,使用poi和itextpdf进行转换 下面是转载于https://github.com/nakaz ...

  8. Java新特性:Java8函数式接口与Lambda表达式(一)

    摘要 何为函数式接口? 什么是lambda表达式,lambda表达式的本质: 函数式接口与lambda表达式的联系:lambda是实现函数式接口的一个快捷方式,可以作为函数式接口的一个实例: 常用Ja ...

  9. java lambda 是什么_自己理解Java中的lambda

    lambda是什么 "Lambda 表达式"(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lam ...

  10. Java Lambda Consumer<T> BiConsumer DoubleConsumer IntConsumer LongConsumer ObjDoubleConsumer ObjLong

    Java Lambda Consumer<T> BiConsumer DoubleConsumer IntConsumer LongConsumer ObjDoubleConsumer O ...

最新文章

  1. java 粒子系统_Java粒子系统(烟火篇)
  2. css中一些必要的公共样式
  3. android h5选择图片上传,js-微信H5选择多张图片预览并上传(兼容ios,安卓,已测试)...
  4. NUC1170 加农炮
  5. 【html笔记】html介绍和语法入门
  6. C/C++怎样传递二维数组,转载自CSDN
  7. Python3.4 枚举类型的使用
  8. 《概率论与数理统计》(浙大第四版)第一章总结笔记(纯手写)
  9. 2015年度APP分类
  10. Linux下常见的权限维持方式
  11. 【Dataset】GoEmotions: A Dataset of Fine-Grained Emotions
  12. c语言tap位置什么意思,CTAP是什么意思
  13. 微信template模板
  14. Unity 径向模糊 简易解决方案
  15. 前端js通过图片路径,展示图片
  16. Python递归学习6 涂格子问题
  17. 6.28(HTML2)
  18. 全志平台修改CPU频率方法
  19. 互联网公司各个岗位的薪资对比
  20. 漏刻有时API接口实战开发系列(13):小鹅通云服务PHP-API二维数组传参解决方案

热门文章

  1. python中类的命名规则_python命名规则
  2. 【OpenGL C++】一些常用的函数,如glMatrixMode() glTranslatef()glRotatef()gluLookAt()等
  3. 凌恩客户文献|宏基因组binning解析中国浓味白酒窖泥微生物群落MAGs和代谢潜力
  4. 视频一键发布多平台自媒体,让你轻松达到10W+
  5. 华为路由器AR1220E-S通过web页面不能登录
  6. 公司固定资产(车辆)处置的流程以及分录
  7. innblock 工具| InnoDB page观察利器
  8. Redis基本命令速查表
  9. 最新31个非常棒的 Photoshop 网页设计教程
  10. linux shell脚本 exit0,Bash exit命令和exit退出代码