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);
}
}
反转输出:
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);
}
}
默认方法: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);
}
}
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);
}
}
同理,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);
}
}
}