函数式接口:有且仅有一个抽象方法的接口,可以包含其他方法
1、supplier接口
java.util.function.Supplier<T>接口仅包含一个无参的方法: T get()。用来获取一个泛型参数指定类型的对象数据
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(()->"表达式方法"); } }
2、Consumer接口
java.util.function.Consumer<T>接口则正好与Supplier接口相反
他不是生产一个数据,而是消费一个数据,其数据类型由泛型决定
Consumer接口中包含抽象方法void accept(T t),意为消费一个指定泛型的数据
示例代码:
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); }); } }
3、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);})); } }
4、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);}); } }