Consumer

java.util.function.Consumer 接口刚好和Supplier接口相反,它不是用来生产一个数据,而是消费一个数据
数据的类型由泛型来指定
accept方法
意思就是消费一个指定泛型的数据
代码如下:

 // 定义一个方法,方法的参数传递一个Consumer<String>接口,传递一个字符串变量public static void consumer(String str,Consumer<String> con) {// 使用消费类型接口对象,消费传递的字符串值con.accept(str);}public  static void main(String[] args) {// 来创建消费方法consumer,Consumer<String>接口是一个函数式接口类型,所以可以使用Lambda表达式consumer("abcdefg", name -> {// 把里面的abcdefg字符串改为大写输出 消费的规则自定义String str = name.toUpperCase();String s = new StringBuffer(str).reverse().toString();System.out.println(s);// GFEDCBA});}

默认的方法:andThen
如果一个方法的参数和返回值全都是Consumer类型,那么就可以实现这样的效果:消费数据的时候,首先做一个消费的操作,在做一个消费的操作,实现组合。可以通过Consumer接口当中的默认方法:andThen来实现。

代码如下:

// 定义一个方法,方法的参数传递一个字符串和两个Consumer接口,Consumer接口的泛型指定为字符串public static void consumers(String str, Consumer<String> con1,Consumer<String> con2) {/* con1.accept(str);con2.accept(str);*/// andThen 连续消费  default Consumer<String> andThen// 先执行左边的Consumer--con1的动作,andThen--->再次执行Consumer--con2动作con1.andThen(con2).accept(str);// 规则 con1连接con2 ,先执行con1消费数据,在执行con2消费数据}public static void main(String[] args) {// 由于consumers方法的参数Consumer接口是一个函数式接口,可以使用Lambda表达式consumers("Java31-中国最棒-都是业界大佬", (name1)->{// 消费规则// 截取传入的字符串String sub = name1.substring(0, 6);System.out.println(sub);}, (name2) -> {// 定义消费的规则 分成字符串数组展示String[] strs = name2.split("-");System.out.println(Arrays.toString(strs));// {“Java31","中国最棒","都是业界大佬"}});}

通过查看源码得知:andThen方法不允许传入一个null对象否则就会抛出空指针异常。

要想把两次消费的动作连接起来,需要传入两个Consumer接口,通过andThen方法实现一步一步执行消费动作。

练习:

​ 定义一个字符串数组,存储每一个人的信息如:“张三,20,郑州市”,存储5个人的信息

​ 使用Consumer接口,按照指定的格式进行打印输出:姓名:张三;年龄:20;地址:郑州市

​ 要求将打印姓名的动作作为第一个Consumer接口的规则

​ 将打印年龄的动作作为第二个Consumer接口的规则

​ 将打印地址的动作作为第三个Consumer接口的规则。

​ 最终将三个Consumer接口按照规定的顺序拼接输出出来。

​ 代码如下:

     // 规则public static void consumers(String[] arr, Consumer<String> con1, Consumer<String> con2, Consumer<String> con3) {// 操作arr数组当中的每一个元素for (String str : arr) {con1.andThen(con2).andThen(con3).accept(str);// 定义了消费的先后的顺序}}public static void main(String[] args) {// 定义一个字符串数组String[] arr = {"李四,20,南阳市", "张三,20,郑州市", "小孙,20,开封市", "小丽,20,信阳市", "小赵,20,洛阳市"};// 调用consumers方法,由于Consumer接口是一个函数式接口,所以可以使用Lambdaconsumers(arr, one -> System.out.print("姓名:" + one.split(",")[0] + ";"),two -> System.out.print("年龄:" + two.split(",")[1] + ";"),three -> System.out.println("地址:" + three.split(",")[2]));}

常用的函数式接口--Consumer接口相关推荐

  1. java accept consumer_Java 常用函数式接口 —— Consumer接口

    JDK提供了大量的函数式接口,方便我们开发的时候无需自己编写接口,这些接口都比较通用,学会他们并且在工作中使用,不仅方便的解决问题,而且十分优雅. 1.接口概述 Consumer 接口也比较简单,只有 ...

  2. Java基础二十二:函数式接口介绍,函数式接口作为方法参数、返回值,Supplier接口、Consumer接口、Predicate接口、Function接口基本介绍及其案例小练习

    函数式接口 1. 函数式接口概念及基本使用 1.函数式接口:有且仅有一个抽象方法的接口,函数式接口就是Lambda表达式使用的前提 2. Java中的函数式编程体现的就是Lambda表达式,所以函数式 ...

  3. 常用的函数式接口_Consumer接口的默认方法andThen

    默认方法:andThen 如果一个方法的参数和返回值全都是Consumer 类型,那么就可以实现效果:消费数据的时候,首先做一个操作,然后再做一个操作,实现组合.而这个方法就是Consumer 接口中 ...

  4. 常用函数式接口-Consumer

    consumer 英 [kənˈsjuːmə(r)] 美 [kənˈsuːmər] n. 消费者:用户,顾客 java.util.function.Consumer<T> 接口则正好与Su ...

  5. 常用Lambda函数式接口

    常用Lambda函数式接口 1-概述 有且只有一个抽象方法,为Lambda准备的接口 都是由@FunctionalInterface进行的注解 2-函数式接口作为方法的参数 创建线程,用的最多且经典的 ...

  6. java socket接口文档_Java进阶 - 网络编程、Socket、函数式接口、常用的函数式接口...

    1.网络通信协议 网络通信协议:通信协议是对计算机必须遵守的规则,只有遵守这些规则,计算机之间才能进行通信.这就好比在道路中行驶的汽车一定要遵守交通规则一样,协议中对数据的传输格式.传输速率.传输步骤 ...

  7. [彻底理解]JDK1.8 函数式接口 Consumer Supplier 以及 JAVA新纪元 λ表达式的到来

    JDK1.8 函数式接口 Consumer & Supplier 以及 JAVA新纪元 λ表达式的到来 背景什么的被吞了,直接进入主题 函数式接口(定义自己百度,一大堆) 因为看了一些关于JD ...

  8. 常用的函数式接口_Consumer接口

    Consumer接口 java.util.function.Consumer<T> 接口则正好与Supplier接口相反,它不是生产一个数据,而是消费一个数据,其数据类型由泛型决定. 抽象 ...

  9. 常用的函数式接口_Supplier接口

    常用函数式接口 JDK提供了大量常用的函数式接口以丰富Lambda的典型使用场景,它们主要在java.util.function 包中被提供. 下面是最简单的几个接口及使用示例. Supplier接口 ...

最新文章

  1. 轻有力读后感ppt_如果您希望招聘人员认真对待您,请建立强有力的个人叙述。...
  2. perl:正则表达式部分
  3. springboot教程(三)
  4. 如何实现动态加载删除android,关于android:融云IMKit-动态删除或添加plugin-的实现...
  5. win10 hyper-v 虚拟机ping不通宿主机问题
  6. android 移除fragment,Android Viewpager+Fragment取消预加载及Fragment方法的学习
  7. Educational Codeforces Round 23 E. Choosing The Commander 字典树
  8. gabor变换人脸识别的python实现,att_faces数据集平均识别率99%
  9. 分布式项目-Nginx安装(反向代理)
  10. retrofit应用详解与源码解析--源码解析
  11. 关于goole浏览器出现页面崩溃情况的解决
  12. 2019腾讯校招客户端方向面经(已拿offer)
  13. 【Windows系统资源】​​​​​​​iexplore.exe命令行参数解释
  14. map-box地图点击图标高亮事件
  15. GSYVideoPlayer实现视频播放
  16. 使用roolup构建你的lib
  17. 安装过程中弹出错误信息,Xshell4提示nslicense.dll无法安装成功
  18. 数学文化/数据结构知识题
  19. 碰撞检测之Sphere-Box检测
  20. JavaScript核心知识总结(下)

热门文章

  1. mysql 三个表的外连接方式,MySQL表连接使用详解,内连接,外连接,交叉连接
  2. matlab filter2和imfilter有什么区别
  3. 【十八掌●武功篇】第十掌:Hive之高级知识
  4. 【javascript】中文逗号,转英文逗号,正则
  5. c语言计算1减2的平方分之一,在数学中必须考虑的运算有两类;加法运算与减法运算-数学位于运算-数学-沙人磕同学...
  6. 【免费好用有关天气的API】
  7. java二维数组初始化值_Java二维数组初始化的方法
  8. Solving environment: failed with initial frozen solve.
  9. Tsinsen A1023瓷砖铺放(动态规划),递推实现
  10. Oracle 如何查询两个结果集之间的交集,不交集