Day24_函数式接口

Posted 黑盒思考

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Day24_函数式接口相关的知识,希望对你有一定的参考价值。

《Java自学180天笔记》

常用函数式接口_Supplier接口

package demo2;
import java.util.function.Supplier;
/*常用的函数式接口java.util.function.Supplier<T>接口仅包含一个无参的方法:T get().用来获取一个泛型参数指定类型的对象数据
Supplier<T>接口被称之为生产型接口,指定接口的泛型是什么类型,那么 接口中的get方法就会生产什么类型数据 */public class DemoSupplier { //定义一个方法,方法的参数传递Supplier<T>接口,泛型执行String,get方法就会返回一个Sting public static String getString(Supplier<String> sup) { return sup.get(); }
public static void main(String[] args) { //调用getString方法,方法的参数Supplier是一个函数式接口,所以可以传递Lambda表达式 String s = getString(()->{ //生产一个字符串,并返回 return "sai"; }); System.out.println(s);
//优化Lambda表达式 String s2 = getString(()->"sai"); System.out.println(s2); }}

常用函数式接口_Consumer接口

package demo2;
import java.util.function.Consumer;
/*java.util.function.Consumer<T>接口正好与Supplier接口相反,它不是生产一个数据,而是消费一个数据其数据类型由泛型决定。Consumer接口是一个消费型接口,泛型执行什么类型,就可以使用accept方法消费什么类型的数据至于具体怎么消费(使用),需要自定义(输出,计算...) */public class DemoConsumer { /* 定义一个方法 方法的参数传递一个字符串姓名 方法的参数传递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)->{ String reName = new StringBuffer(name).reverse().toString(); System.out.println(reName); }); }}
欢黄

常用函数式接口_Predicate接口

package demo2;
import java.util.function.Predicate;
/*java.util.function.Predicate<T>接口作用:对某种数据类型的数据进行判断,结果返回一个boolean值
Predicate接口中包含一个抽象方法:boolean test(T t):用来对指定数据类型进行判断的方法 结果:符合条件,返回true 不符合条件,返回false */public class DemoPredicate { /* 定义一个方法 参数传递一个String类型字符串 传递一个Predicate接口,泛型使用String 使用Predicate中的方法test对字符串进行判断,并把判断的结果返回 */ public static boolean checkString(String s, Predicate<String> pre){ return pre.test(s); }
public static void main(String[] args) { //定义一个字符串 String s = "abcde";
//调用checkString方法对字符串进行校验,参数传递字符串和Lambda表达式 boolean b = checkString(s,(String str)->{ //对参数传递的字符串进行判断,判断字符串的长度是否大于5,并把判断的结果返回 return str.length()>5; }); System.out.println(b); }}

常用函数式接口_Function接口

package demo2;
import java.util.function.Function;
/*java.util.function.Function<T,R>接口用来根据一个类型的数据得到另一个类型的数据, 前者称为前置条件,后者称为后置条件。Function接口中最主要的抽象方法为:R apply(T t),根据类型T的参数获取类型R的结果。使用的场景例如:将String类型转换为Integer类型。*/public class DemoFunction { /* 定义一个方法 方法的参数传递一个字符串类型的整数 方法的参数传递一个Function接口,泛型使用<String,Integer> 使用Function接口中的方法apply,把字符串类型的整数,转换为Integer类型的整数 */ public static void change(String s, Function<String,Integer> fun){ Integer in = fun.apply(s); System.out.println(in); }
public static void main(String[] args) { //定义一个字符串类型的整数 String s = "1234"; //调用change方法,传递字符串类型的整数,和Lanbda表达式 change(s,(String str)->{ //把字符串类型的整数,转换为Integer类型的整数返回 return Integer.parseInt(str); }); }
}

常用函数式接口_Function接口  自定义函数模型拼接

package demo2;
import java.util.function.Function;
/*练习:自定义函数模型拼接题目请使用Function进行函数模型的拼接,按照顺序需要执行的多个函数操作为:String str = "聂卫平,20";
分析:1.将字符串截取数字年龄部分,得到字符串;Function<String,String> "聂卫平,20"->"20"2.将上一步的字符串转换成为int类型的数字;Function<String,Integer> "20" -> 203.将上一步的int数字累加100,得到结果int数字。Function<Integer,Integer> 20 -> 120 */public class DemoTest { /* 定义一个方法 参数传递包含姓名和年龄的字符串 参数再传递3个Function接口用于类型转换 */ public static int change(String s, Function<String,String> fun1, Function<String,Integer> fun2,Function<Integer,Integer> fun3){ //使用andThen方法把三个转换组合到一起 return fun1.andThen(fun2).andThen(fun3).apply(s); }
public static void main(String[] args) { //定义一个字符串 String str = "聂卫平,20"; //调用change方法,参数传递字符串和3个Lambda表达式 int num = change(str,(String s)->{ //"聂卫平,20" return s.split(",")[1]; },(String s)->{ //"20" -> 20 return Integer.parseInt(s); },(Integer i)->{ //20->120 return i+100; }); System.out.println(num); }}

以上是关于Day24_函数式接口的主要内容,如果未能解决你的问题,请参考以下文章

Python day 6 Python 函数式编程3

python函数第5天(day 24)

python 学习 [day7]面向对象

Java Lambda

Java8_函数式接口

Day24