• 函数式接口 BiConsumer接口和Consumer接口


    BiConsumer定义了两个泛型类型T和R,分别做为accept()方法的参数类型,BiConsumer支持2个参数。

     1.void accept(T t, U u);方法

    自定义IBiConsumer类

    1. @Data
    2. public class IBiConsumer {
    3. private final BiConsumer biConsumer;
    4. // 初始化biConsumer
    5. public IBiConsumer(BiConsumer biConsumer) {
    6. this.biConsumer = biConsumer;
    7. }
    8. public void consume(T t, R r) {
    9. System.out.println("这里可以进行一系列的操作");
    10. biConsumer.accept(t, r);
    11. }
    12. }

    测试

    1. public static void main(String[] args) {
    2. IBiConsumer biConsumer = new IBiConsumer<>((k,v) -> {
    3. System.out.println("此处是对两个参数的打印, k = " + k + " v = " + v);
    4. });
    5. biConsumer.consume("vvv","kkk");
    6. }
    7. //这里可以进行一系列的操作
    8. //此处是对两个参数的打印, k = 这是一段测试内容 v = 没错,这还是一段测试内容

    2.default BiConsumer andThen(BiConsumer after)方法

    super表示下限的类型,extends 表示上限的类型,参数1 至少为T类型或者为T类型的父类,参数2为U类型或者U类型的父类。andThen方法表示会继承当前BiConsumer继续调用下一个BiConsumer里的accept()方法。


    自定义IBiConsumer类

    1. @Data
    2. public class IBiConsumer {
    3. private final BiConsumer biConsumer;
    4. private IBiConsumer next;
    5. // 初始化biConsumer
    6. public IBiConsumer(BiConsumer biConsumer) {
    7. this.biConsumer = biConsumer;
    8. }
    9. public void consume(T t, R r) {
    10. //当前
    11. BiConsumer chainConsumer = this.biConsumer;
    12. while (this.next != null) {
    13. //将会把所有的要执行的任务合成到chainConsumer这一个对象中
    14. chainConsumer = chainConsumer.andThen(this.next.biConsumer);
    15. next = next.next;
    16. }
    17. //统一执行
    18. chainConsumer.accept(t, r);
    19. }
    20. public void addLast(BiConsumer biConsumer) {
    21. // 遍历链表到表尾
    22. IBiConsumer current = this;
    23. while (current.next != null) {
    24. current = current.next;
    25. }
    26. current.next = new IBiConsumer<>(biConsumer);
    27. }
    28. }

    测试

    1. public static void main(String[] args) {
    2. IBiConsumer biConsumer = new IBiConsumer<>((k,v) -> {
    3. System.out.println("此处是对两个参数的打印, k = " + k + " v = " + v);
    4. });
    5. biConsumer.addLast((k,v) -> {
    6. System.out.println(k + v);
    7. });
    8. biConsumer.addLast((k,v) -> {
    9. System.out.println(k + v + "ccc");
    10. });
    11. biConsumer.addLast((k,v) -> {
    12. System.out.println(k + v + "ccc" + "ddd");
    13. });
    14. biConsumer.consume("aaa","bbb");
    15. }
    16. //aaabbb
    17. //aaabbbccc
    18. //aaabbbcccddd

  • 相关阅读:
    java毕业设计共享充电宝系统(附源码、数据库)
    [附源码]SSM计算机毕业设计校园兼职招聘系统JAVA
    【操作系统】第五章:设备管理
    Java基础之正则表达式
    在linux(centos7)部署xxl-job的过程
    那么你面试必须知道的H5C3知识点
    06【Redis事务与分布式锁】
    核医学重点归纳
    以YOLOv5为基准实现布匹缺陷检测(Fabric Defect Detection)
    山东菏泽家乡网页代码 html静态网页设计制作 dw静态网页成品模板素材网页 web前端网页设计与制作 div静态网页设计
  • 原文地址:https://blog.csdn.net/winerpro/article/details/126572176