函数式编程:基于函数式接口并使用lamda表达式的编程,将代码作为可重用数据带入到程序运行中。
函数式接口:只有一个抽象方法,如java.lang.Runnable
JDK8后提供了新的函数式接口,位于java.util.function
常用函数式接口:
函数式接口Predicate< T >:
用于测试传入的数据是否满足判断要求,通过test()
方法进行逻辑判断,满足条件返回true,不满足返回false
Predicate<Integer> predicate=n->n>4;
boolean result=predicate.test(10);//true
List<Integer> list=Arrays.asList(1,2,3,4,5,6,7);
filter(list,n->n%2==0);
}
public static void filter(List<Integer> list,Predicate<Integer> predicate){
for(Integer num:list){
if(predicate.test(num)){
System.out.println(num);
}
}
函数式接口Consumer< T >:
有一个输入参数,无输出结果,通过调用accpt()
方法
output(s->System.out.println(s))
public static void output(Consumer<String> consumer){
String text="XXXXXXXXXXX";
consumer.accept(text);
函数式接口Function<T,R>:
有一个输入参数,需要返回数据,通过调用apply()
方法
//生成定长随机字符串
Function<Integer,String> randomString=l->{
String chars="abcdefghijklmnopqrstuvwxyz0123456789";
StringBuffer sb=new StringBuffer();
Random random=new Random();
for(int i=0;i<l;i++){
int position=random.nextInt(chars.length());
sb.append(chars.charAt(position));
}
return sb.toString();
};
randomString.apply(5);//生成长度为5的随机字符串