赞
踩
JDK中提供了大量的函数式接口以丰富Lambda的典型使用场景,主要在java.util.function包。
<1>Supplier接口
Supplier<T> 接口仅包含一个无参的方法,T get(),用来获取一个泛型参数指定类型的对象数据 //该接口被称之为生产型接口,指定接口的泛型是什么类型,那么接口中的get方法就会生产什么类型的数据
package Demo38;
import java.util.function.Supplier;
public class Demo02Supplier {
public static String getString(Supplier<String> sup){
return sup.get();
}
public static void main(String[] args) {
String s = getString(()->{
return "aaa";
});
System.out.println(s);
//简化的lambda
String s2 = getString(()->"aaa");
System.out.println(s2);
}
}
<2>Consumer<T> 接口与Supplier<T>接口相反,是消费一个数据
package Demo38;
import java.util.function.Consumer;
public class Demo03Consumer {
public static void method(String name, Consumer<String> con){
con.accept(name);
}
//该接口特有的默认方法andThen ,把两个Consumer接口组合到一起,再对数据消费
public static void method01(String s,Consumer<String> con1,Consumer<String> con2){
// con1.accept(s);
// con2.accept(s);
con1.andThen(con2).accept(s); //先con1执行消费数据后con2,等价于上面两行代码
}
public static void main(String[] args) {
method("南风",(String name)->{
System.out.println(name);
});
method01("hello",
(t)->{
System.out.println(t.toUpperCase()); //消费数据方式是将字符串转换大写
},
(t)->{
System.out.println(t.toLowerCase());//消费数据方式是将字符串转换小写
});
}
}
<3>Predicate<T>接口,对某种数据类型的数据进行判断,返回一个boolean值
and,or,方法用于连接两个判断条件,negate取反
package Demo39;
import java.util.function.Predicate;
public class Demo01Predicate {
public static boolean chechString(String s, Predicate<String> pre){
return pre.test(s);
}
//and方法
public static boolean checkString01(String s,Predicate<String> pre1,Predicate<String> pre2){
return pre1.and(pre2).test(s);// 等价于return pre1.test(s) && pre2.test(s);
}
//negate方法
public static boolean checkString02(String s,Predicate<String> pre){
return pre.negate().test(s); //等价于 !pre.test(s)
}
//or方法
public static boolean checkString(String s,Predicate<String> pre1,Predicate<String> pre2){
return pre1.or(pre2).test(s); //等价于 return pre1.test(s) || pre2.test(s);
}
public static void main(String[] args) {
String s = "code";
// boolean b = chechString(s,(String str)->{
// return str.length() > 5;
// });
boolean b = chechString(s,str -> str.length() > 5);
System.out.println(b);
boolean b1 = checkString01(s,(String str)->{
return str.length()>5;
},(String str)->{
return str.contains("d");
});
System.out.println(b1);
}
}
<4>Function<T,R>接口,接口根据一个类型的数据得到另一个数据类型的数据,前者为前置条件,后者为后置条件
该接口最主要的抽象方法是 apply(T t)
其中的默认方法andThen()用来组合操作
package Demo39;
import java.util.function.Function;
public class Demo02Function{
public static void change(String s, Function<String,Integer> fun){
Integer in = fun.apply(s);
System.out.println(in);
}
public static void change01(String s,Function<String,Integer> fun1,Function<Integer,String> fun2){
String ss = fun1.andThen(fun2).apply(s);
System.out.println(ss);
}
public static void main(String[] args) {
String s = "123456";
change(s,(String str)->{
return Integer.parseInt(str);
});
//将字符串转换为整形,再+10,再转换为字符串输出
change01(s,(String str)->{
return Integer.parseInt(str)+10;
},(Integer i)->{
return i+"";
});
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。