Consumer接口的使用
概要
方法 | 方法的说明 |
---|---|
void accept(T t) | 对给定的参数执行此操作。 参数 t - 输入参数 |
default Consumer andThen(Consumer<? super T> after) | 返回一个组合的Consumer , Consumer执行该操作,后跟after操作。 如果执行任一操作会抛出异常,它将被转发到组合操作的调用者。 如果执行此操作抛出一个异常, after操作将被执行。 参数 after - 此操作后执行的操作 结果 一个组合的 Consumer按顺序执行该操作,后跟 after操作 |
代码操作
不是组合情况下(一个接口处理一个事务)
package Demo;
import java.util.function.Consumer;
/*
Consumer<T>:包含两个方法
void accept(T t):对给定参数执行此操作
default Consumer<T> andThen(Consumer after):返回一个组合的Consumer,依次执行次操作,然后执行after操作
*/
public class ConsumerDemo {
public static void main(String[] args) {
//用lambda表达式写
operatorString("ikun",(s)-> System.out.println(s));
}
//定义一个方法(operatorString),消费一个字符串数据
private static void operatorString(String name, Consumer<String>c){
c.accept(name);//c执行
}
}
是组合情况下(多个接口处理一个事务)
ConsumerDemo类
package Demo;
import java.util.function.Consumer;
/*
Consumer<T>:包含两个方法
void accept(T t):对给定参数执行此操作
default Consumer<T> andThen(Consumer after):返回一个组合的Consumer,依次执行次操作,然后执行after操作
*/
public class ConsumerDemo {
public static void main(String[] args) {
/*
//用
operatorString("ikun", new Consumer<String>() {
@Override
public void accept(String s) {
String s1 = s;
System.out.println(s1);
}
},new Consumer<String>() {
@Override
public void accept(String s) {
StringBuilder sb = new StringBuilder(s);
sb.reverse();
String s2 = sb.toString();
System.out.println(s2);
}
});
*/
//用lambda表达式写
operatorString("ikun",(s)-> System.out.println(s),(s1)-> System.out.println(new StringBuilder(s1).reverse().toString()));
}
//定义一个方法(operatorString),消费一个字符串数据
private static void operatorString(String name, Consumer<String>c1,Consumer<String> c2){
c1.andThen(c2).accept(name);//c1先执行,完了c2再执行
}
}
习题练习
练习
- String[] strArray={“iKun,30”,“iKun2,27”,“iKun3,40”};
- 字符串数组中有多条信息,请按照格式:“姓名,XX年龄:XX的格式信息打印出来”
- 要求:
把打印姓名的动作作为第一个Consumer接口的Lambda实例
把打印年龄的动作作为第二个Consumer接口的Lambda实例
将两个Consumer接口按照顺序组合到一起使用
package Demo;
import java.util.function.Consumer;
/*
练习
String[] strArray={"iKun,30","iKun2,27","iKun3,40"};
字符串数组中有多条信息,请按照格式:"姓名,XX年龄:XX的格式信息打印出来"
要求:
把打印姓名的动作作为第一个Consumer接口的Lambda实例
把打印年龄的动作作为第二个Consumer接口的Lambda实例
将两个Consumer接口按照顺序组合到一起使用
*/
public class ConsumerDemo {
public static void main(String[] args) {
String[] strArray={"iKun,30","iKun2,27","iKun3,40"};
/*
//用匿名类
printInfo(strArray, new Consumer<String>() {
@Override
public void accept(String str1) {
String[] s1 = str1.split(",");
System.out.println("姓名:"+s1[0]);
}
},new Consumer<String>() {
@Override
public void accept(String str2) {
String[] s2 = str2.split(",");
System.out.println("年龄:"+s2[1]);
}
});
*/
//用lambda表达式
printInfo(strArray,str1-> System.out.print("姓名:"+str1.split(",")[0]),str2-> System.out.print("年龄:"+str2.split(",")[1]));
}
//定义一个方法为printInfo
private static void printInfo(String[] strArray,Consumer<String> c1,Consumer<String> c2){
for(String str:strArray){
c1.andThen(c2).accept(str);
}
}
}
输出的内容为:
姓名:iKun年龄:30姓名:iKun2年龄:27姓名:iKun3年龄:40