JUC并发编程-函数式接口与Stream流计算

函数式接口定义

函数式接口是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 pre=(str)->{return str.equals("aaa");};

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 con= (str)->{

System.out.println("函数式接口consumer:"+str);

};

con.accept(10);

}

 

private static void testFunction() {

Function fun= (str)->{return String.valueOf(str);};

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 lists= Arrays.asList(u1,u2,u3,u4,u4);

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流引入优化参数过滤机制: 利率重检时过滤超时数据,超期天数

 

 

 

你可能感兴趣的:(线程与高并发)