Consumer接口是一个消费型接口,泛型指定什么类型,就可以使用accept消费什么类型数据

直接输出:

public class Demo {
    public static void main(String[] args) {
        method("asd",(name)-> System.out.println(name));
    }
    public static void method(String name, Consumer<String>con) {
        con.accept(name);
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

反转输出:

public class Demo {
    public static void main(String[] args) {
        method("asd",(name)-> {
            String reName=new StringBuffer(name).reverse().toString();
            System.out.println(reName);
        });
    }
    public static void method(String name, Consumer<String>con) {
        con.accept(name);
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

默认方法:andThen

如果一个方法的参数和返回值全都是Consumer类型,那么就可以实现效果:

消费数据的时候,首先做一个操作,然后再做一个操作,实现组合,而这个方法就是Consumer接口中的default方法andThen

常规写法:

public class Demo {
    public static void main(String[] args) {
       method("hello",(t)->{
           System.out.println(t.toLowerCase(Locale.ROOT));
       },(t)->{
           System.out.println(t.toUpperCase(Locale.ROOT));
       });
    }
    public static void method(String name, Consumer<String>con1,Consumer<String>con2) {
        con1.accept(name);
        con2.accept(name);
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.

andThen写法

public class Demo {
    public static void main(String[] args) {
       method("hello",(t)->{
           System.out.println(t.toLowerCase(Locale.ROOT));
       },(t)->{
           System.out.println(t.toUpperCase(Locale.ROOT));
       });
    }
    public static void method(String name, Consumer<String>con1,Consumer<String>con2) {
       con1.andThen(con2).accept(name);
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

同理,3个接口可以用两个andThen

习题:有一个字符串数组,有姓名和性别,用两个Consumer接口输出

public class Demo {
    public static void main(String[] args) {
      String[]arr={"张三,男","李四,女"};
      method(arr,(m)->{
          String name=m.split(",")[0];

          System.out.print("姓名:"+name+" ");
      },(m)->{
          String male=m.split(",")[1];
          System.out.println("性别"+male);
      });
    }
    public static void method(String[] name, Consumer<String>con1,Consumer<String>con2) {
       for(String message:name){
        con1.andThen(con2).accept(message);
     }
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.