包含一个无参的方法
T get():获得结果该方法不需要参数,它会按照某种实现逻辑(由Lambda表达式实现)返回一个数据Supplier接口也被称为生产型接口,如果我们指定了接口的泛型是什么类型,那么接口中的get方法就会生产什么类型的数据供我们使用。
4.1.1、案例1 public class Demo3 {public static void main(String[] args) {String s = getString(() -> {return "小苗";});System.out.println(s);System.out.println("---------------");Integer i = getInteger(() -> 30);System.out.println(i);}//定义一个方法,返回一个整数数据private static Integer getInteger(Supplier<Integer> sup) {return sup.get();}//定义一个方法,返回一个字符串数据private static String getString(Supplier<String> sup) {return sup.get();}} 4.1.2、案例2 用于返回一个int数组中的最大值public class Demo5 {public static void main(String[] args) {// 定义一个int数组int[] arr = { 19, 50, 28, 37, 46 };int maxValue = getMax(() -> {int max = arr[0];for (int i = 1; i < arr.length; i++) {if (arr[i] > max) {max = arr[i];}}return max;});System.out.println(maxValue);}// 返回一个int数组中的最大值private static int getMax(Supplier<Integer> sup) {return sup.get();}} 4.2、Consumer包含两个方法
void accept(T t):对给定的参数执行此操作default Consumer andThen(Consumer after):返回一个组合的Consumer,依次执行此操作,然后执行 after操作。这个要看源码才能理解。被称为消费型接口,它消费的数据类型由泛型指定。
4.2.1、案例 public class Demo3 {public static void main(String[] args) {operatorString("ABC", (String s) -> {System.out.println(s.toLowerCase());});System.out.println("-----------");operatorString("ABC", (String s) -> {System.out.println(s + "转小写:" + s.toLowerCase());}, (String s) -> {System.out.println("倒序:" + new StringBuilder(s).reverse().toString());});}// 定义一个方法,用不同的方式消费同一个字符串数据两次private static void operatorString(String name, Consumer<String> con1, Consumer<String> con2) {// con1.accept(name);// con2.accept(name);con1.andThen(con2).accept(name);}// 定义一个方法,消费一个字符串数据private static void operatorString(String name, Consumer<String> con) {con.accept(name);}} 4.2.2、案例2 1. String[] strArray = {"林青霞,30", "张曼玉,35", "王祖贤,33"};2. 字符串数组中有多条信息,请按照格式:"姓名:XX,年龄:XX"的格式将信息打印出来要求:把打印姓名的动作作为第一个Consumer接口的Lambda实例把打印年龄的动作作为第二个Consumer接口的Lambda实例将两个Consumer接口按照顺序组合到一起使用 public class Demo4 {public static void main(String[] args) {String[] strArray = { "林青霞,30", "张曼玉,35", "王祖贤,33" };printInfo(strArray,(String str) -> {String name = str.split(",")[0];System.out.print("姓名:" + name);},(String str) -> {int age = Integer.parseInt(str.split(",")[1]);System.out.println(",年龄:" + age);});}private static void printInfo(String[] strArray, Consumer<String> con1, Consumer<String> con2) {for (String str : strArray) {con1.andThen(con2).accept(str);}}} 4.3、PredicatePredicate接口通常用于判断参数是否满足指定的条件
常用方法如下
1. boolean test(T t):对给定的参数进行判断(判断逻辑由Lambda表达式实现),返回一个布尔值 2. default Predicate<T> negate():返回一个逻辑的否定,对应逻辑非( !) 3. default Predicate<T> and(Predicate other):返回一个组合判断,对应短路与(&&) 4. default Predicate<T> or(Predicate other):返回一个组合判断,对应短路或(||) 4.3.1、案例1 public class Demo1 {public static void main(String[] args) {boolean b1 = checkString("A", (String s) -> {return s.equals("A");});System.out.println("b1:" + b1);boolean b2 = checkString("B", (String s) -> {return s.equals("A");});System.out.println("b2:" + b2);}// 逻辑非操作private static boolean checkString(String s, Predicate<String> pre) {// return pre.test(s);// return !pre.test(s);return pre.negate().test(s);}} 4.3.1、案例2 public class Demo2 {public static void main(String[] args) {boolean b1 = checkString2("A", (String s) -> {return s.equals("A");}, (String s) -> {return s.equals("B");});System.out.println("b1:" + b1);boolean b2 = checkString3("A", (String s) -> {return s.equals("A");}, (String s) -> {return s.equals("B");});System.out.println("b2:" + b2);}// 逻辑与运算private static boolean checkString2(String s, Predicate<String> pre1, Predicate<String> pre2) {return pre1.and(pre2).test(s);}// 逻辑或运算private static boolean checkString3(String s, Predicate<String> pre1, Predicate<String> pre2) {return pre1.or(pre2).test(s);}} 4.3.1、案例3 1. String[] strArray = {"林青霞,30", "柳岩,34", "张曼玉,35", "貂蝉,31", "王祖贤,33"};2. 字符串数组中有多条信息,请通过Predicate接口的拼装将符合要求的字符串筛选到集合ArrayList中,并遍历ArrayList集合3. 要求:同时满足如下要求 1:姓名长度大于2 2:年龄大于334. 分析: 1:有两个判断条件,所以需要使用两个Predicate接口,对条件进行判断 2:必须同时满足两个条件,所以可以使用and方法连接两个判断条件 public class Demo3 {public static void main(String[] args) {String[] strArray = { "林青霞,30", "柳岩,34", "张曼玉,35", "貂蝉,31", "王祖贤,33" };ArrayList<String> array = myFilter(strArray,s -> s.split(",")[0].length() > 2,s -> Integer.parseInt(s.split(",")[1]) > 33);for (String str : array) {System.out.println(str);}}// 通过Predicate接口的拼装将符合要求的字符串筛选到集合ArrayList中private static ArrayList<String> myFilter(String[] strArray, Predicate<String> pre1, Predicate<String> pre2) {// 定义一个集合ArrayList<String> array = new ArrayList<>();// 遍历数组for (String str : strArray) {if (pre1.and(pre2).test(str)) {array.add(str);}}return array;}} 4.4、Function<T,R> Function<T,R> 接口通常用于对参数进行处理,转换,然后返回一个新的值。常用的两个方法 R apply(T t): 将此函数应用于给定的参数 default Function andThen(Function after): 返回一个组合函数,首先将该函数应用于输入,然后将after函数应用于结果 4.4.1、案例1 public class Demo4 {public static void main(String[] args) {System.out.println("--------把一个字符串转换int类型,在控制台输出----------");convert("100", s -> Integer.parseInt(s));System.out.println("--------把一个int类型的数据加上一个整数之后,转为字符串在控制台输出----------");convert(100, i -> String.valueOf(i + 566));System.out.println("--------把一个字符串转换int类型,把int类型的数据加上一个整数之后,转为字符串在控制台输出----------");convert("100", s -> Integer.parseInt(s), i -> String.valueOf(i + 566));}// 把一个字符串转换int类型,在控制台输出private static void convert(String s, Function<String, Integer> fun) {int i = fun.apply(s);System.out.println(i);}// 把一个int类型的数据加上一个整数之后,转为字符串在控制台输出private static void convert(int i, Function<Integer, String> fun) {String s = fun.apply(i);System.out.println(s);}// 把一个字符串转换int类型,把int类型的数据加上一个整数之后,转为字符串在控制台输出private static void convert(String s, Function<String, Integer> fun1, Function<Integer, String> fun2) {// Integer i = fun1.apply(s);// String ss = fun2.apply(i);// System.out.println(ss);String ss = fun1.andThen(fun2).apply(s);System.out.println(ss);}} 4.4.2、案例2 1. String s = "林青霞,30";2. 请按照我指定的要求进行操作: 1. 将字符串截取得到数字年龄部分 2. 将上一步的年龄字符串转换成为int类型的数据 3. 将上一步的int数据加70,得到一个int结果,在控制台输出3. 请通过Function接口来实现函数拼接 public class Demo5 {public static void main(String[] args) {String s = "林青霞,30";convert(s,(String ss) -> {return s.split(",")[1];},(String ss) -> {return Integer.parseInt(ss);},(Integer i) -> {return i + 70;});}private static void convert(String s, Function<String, String> fun1, Function<String, Integer> fun2,Function<Integer, Integer> fun3) {int i = fun1.andThen(fun2).andThen(fun3).apply(s);System.out.println(i);}}代码地址
https://gitee.com/DanShenGuiZu/learnDemo/tree/mysql_mybaties_DB/jdk8-learn