函数式接口定义
函数式接口是jdk1.8之后出来的,在java.util.function下包。
所谓函数式接口的定义是:接口内只定义一个抽象方法,则该接口称为函数式接口。
函数式接口思想: “函数式编程”是一种编程的范式和编程的方法论(programming paradigm),它属于结构化编程的一种,主要的思想是把运算的过程尽量通过一组嵌套的函数来实现。
优点:用更少的代码实现更多的功能,以提高开发效率
四大核心函数式接口
Function : 函数型,有一个输入参数有一个输出参数
Consumer:消费型,有一个输入参数,没有输出参数
Supplier:供给型,没有输入参数,只有输出参数
Predicate:断言型,有一个输入参数,判断是否正确!
实例演示
/**
* Function : 函数型,有一个输入参数有一个输出参数
Consumer:消费型,有一个输入参数,没有输出参数
Supplier:供给型,没有输入参数,只有输出参数
Predicate:断言型,有一个输入参数,判断是否正确!
*/
public class FunctionMain {
static int age=100;
public static void main(String[] args) {
//函数
testFunction();
//消费
testConsumer();
//消费
testSupplier();
//消费
Predicate();
}
private static void Predicate() {
Predicate
System.out.println("函数式接口predicate:"+pre.test("aaa"));
}
private static void testSupplier() {
SupplierInteface supper=()->{ return age-1;};
System.out.println("函数式接口supplier:"+supper.sum());
}
private static void testConsumer() {
Consumer
System.out.println("函数式接口consumer:"+str);
};
con.accept(10);
}
private static void testFunction() {
Function
System.out.println("函数式接口function1:"+fun.apply(100));
FunctionInteface face=(i,j)->{return i+j;};
System.out.println("函数式接口function2:"+face.sum(1,2));
}
@FunctionalInterface
public interface FunctionInteface{
public int sum(int i,int j);
}
@FunctionalInterface
public interface SupplierInteface{
public int sum();
}
}
测试结果:
函数式接口function1:100
函数式接口function2:3
函数式接口consumer:10
函数式接口supplier:99
函数式接口predicate:true
应用场景
1.简化代码开发,如上所示
2.针对集合操作的处理优化,例如用函数式接口+lambda语法组成的Stream流方式,可以对集合操作进行改造。
Stream流处理方式:
private static void testStream() {
User u1=new User(10,"hua1");
User u2=new User(15,"hua2");
User u3=new User(20,"hua3");
User u4=new User(30,"hua4");
List
int count= (int) lists.stream().count();
System.out.println("长度统计:"+count);
List list= lists.stream().filter(u->u.age>10).collect(Collectors.toList());
System.out.println("过滤age>10后,长度为:"+list);
boolean result=lists.stream().anyMatch(u->u.age>=30);
System.out.println("是否存在年龄>=30岁:"+result);
List listNew=lists.stream().map(u->{return u.name.toUpperCase();}).collect(Collectors.toList());
System.out.println("名字大写修改"+listNew);
}
执行结果:
长度统计:5
过滤age>10后,长度为:[age:15,name:hua2, age:20,name:hua3, age:30,name:hua4, age:30,name:hua4]
是否存在年龄>=30岁:true
名字大写修改[HUA1, HUA2, HUA3, HUA4, HUA4]
流使用优势:1.减少代码开发量 2.提交集合过滤效率
对现有电子交易平台的改进思考
1.Stream流引入用于参数排序优化改进:例如 规则排序,占额排序
2.Stream流引入优化参数过滤机制: 利率重检时过滤超时数据,超期天数