常见函数式接口
JDK提供了大量常用的函数式接口以丰富Lambda的经典使用常见 它们注意在java.util.function包中被提供Consumer接口
Consumer<T>接口则正好与Supplier接口相反 它不是生成一个数据 而是消费一个数据 其数据类型由泛型决定
抽象方法:accept
Consumer接口中包含抽象方法void accept(T t),意为消费一个指定泛型的数据
代码:
/* Consumer接口是一个消费型接口 泛型执行什么类型 就可以使用accept方法消费什么类型的数据 至于具体怎么消费(使用) 需要自定义(输出,计算...) */ public class Demo01Consumer { /* 定义一个方法 方法的参数传递一个字符串的姓名 方法的参数传递Consumer接口 泛型使用String 可以使用Consumer接口消费字符串的姓名 */ public static void method(String name, Consumer<String> con){ con.accept(name); } public static void main(String[] args) { //调用method方法 传递字符串姓名 方法的另一个参数consumer接口 是一个函数式接口 所以可以传递lambda表达式 method("张三",(String name)->{ //对传递的字符串进行消费 //消费方式:直接输出字符串 System.out.println(name); //消费方式:将字符串进行反转 String reaname=new StringBuffer(name).reverse().toString(); System.out.println(reaname); }); } }
运行结果
默认方法:andThen
如果一个方法的参数和返回值全都是Consumer类型 那么可以实现效果 消费数据的时候 首先做一个操作 然后再做一个操作 实现组合 而这个方法就是Consumer接口中的default方法andThem
作用:需要两个Consumer接口 可以把两个ConSumer接口组合到一起 在对数据进行消费
例如:
consumer<String> con1
consumer<String> con2
String s="hello"
con1.accept(s);
con2.accept(s);
连接两个Consumer接口 再进行消费
con1.andThen(con2).accept(s);谁写前边谁先消费
代码:
public class Demo01AndThen { //定义一个方法 方法的参数传递一个字符串和两个Consumer接口 consumer接口的泛型使用字符串 public static void method(String s, Consumer<String> con1,Consumer<String> con2){ con1.accept(s); con2.accept(s); System.out.println("-----------------"); //使用andThen方法 吧两个Consumer接口连接到一起 在消费 con1.andThen(con2).accept(s); } public static void main(String[] args) { //调用method方法 传递一个字符串 两个Lambda表达式 method("Hello", (s)->{ //消费方式:把字符串转换为大写输出 System.out.println(s.toUpperCase()); }, (s)->{ //消费方式:把字符串转换为小写输出 System.out.println(s.toLowerCase()); }); } }
运行结果:
练习:格式化打印信息
题目:
下面的字符串数组当中存有多条信息 请按照格式“姓名:xx。性别:xx”的格式将信息打印出来 要求将打印姓名的动作作为第一个Consumer接口的Lambda实例 将打印性别的动作作为第二个Consumer接口的Lambda实例 将两个Consumer接口拼接到一起
代码:
public class Demo02Consumer { public static void method(String[] s, Consumer<String> con1, Consumer<String> con2) { for (String s1 : s) { con1.andThen(con2).accept(s1); } } public static void main(String[] args) { String[] str = {"张三,男", "李四,女", "王五,男"}; method(str, s1 -> System.out.println(s1.split(",")[0]), s1 -> System.out.println(s1.split(",")[1])); } }
运行结果:
标签:函数,accept,接口,字符串,Consumer,public,String From: https://www.cnblogs.com/shenziyi/p/16798486.html