• 函数式接口 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

  • 相关阅读:
    IPO解读丨高处不胜寒,澜沧古茶低头取暖?
    关于Oracle数据库审计、诊断文件及跟踪文件操作
    Java设计模式中策略模式
    用了这么久SpringBoot却还不知道的一个小技巧
    http与https的区别
    AD批量修改用户属性值
    【Python】【源码】SocketIO做一个网络聊天室软件-服务端源码
    中间代码生成(Intermediate Code Generation)
    如何判断被DDoS攻击
    leetcode竞赛:20220904周赛
  • 原文地址:https://blog.csdn.net/winerpro/article/details/126572176