函数式接口:有且仅有一个抽象方法的接口,能够包含其余方法java
一、supplier接口app
java.util.function.Supplier<T>接口仅包含一个无参的方法: T get()。用来获取一个泛型参数指定类型的对象数据ide
Supplier<T>接口被称之为生产型接口,指定接口的泛型是什么类型,那么接口中的get方法就会生成什么类型的数据函数
示例代码:对象
public class Demo { public static String getString(Supplier<String> supplier){ return supplier.get(); } public static void main(String[] args) { String str = getString(new Supplier<String>() { @Override public String get() { return "匿名内部类方法"; } }); String str1 =getString(()->"表达式方法"); } }
二、Consumer接口接口
java.util.function.Consumer<T>接口则正好与Supplier接口相反get
他不是生产一个数据,而是消费一个数据,其数据类型由泛型决定io
Consumer接口中包含抽象方法void accept(T t),意为消费一个指定泛型的数据function
示例代码:class
public class Demo { public static void method(String name, Consumer<String> con){con.accept(name);} public static void main(String[] args) { method("读者", new Consumer<String>() { @Override public void accept(String s) { System.out.println(s); } }); method("读者",(s)->{ System.out.println(s); }); } }
三、Predicate
java.util.function.Predicate<T>接口
做用:对某种数据类型的数据进行判断,结果返回一个boolean值
Predicate接口中包含一个抽象方法:
boolean test(T t):用来对指定数据类型数据进行判断的方法,结果:符合返回true,不符合返回false
示例代码:
public class Demo { public static boolean checkString(String s, Predicate<String> predicate){return predicate.test(s);} public static void main(String[] args) { boolean b = checkString("abcde", new Predicate<String>() { @Override public boolean test(String s) { return (s.length()>5); } }); System.out.println(b); System.out.println(checkString("abcde",(s)->{return (s.length()>5);})); } }
四、Function
java.util.function.Function<T,R>接口用来根据一个类型的数据获得另外一个类型的数据
Function接口中最主要的抽象方法为:R apply(T t)根据类型T的参数获取R的结果
示例代码:
public class Demo { public static void change(String s, Function<String,Integer> function){ Integer in = function.apply(s); System.out.println(in); } public static void main(String[] args) { String s= "123"; change(s, new Function<String, Integer>() { @Override public Integer apply(String s) { return Integer.parseInt(s); } }); change(s,(s1)->{return Integer.parseInt(s1);}); } }