基于Java8 函数式接口理解及测试
程序员文章站
2024-02-09 21:16:04
1. 函数式接口的理解
根据重构的思想,需要把容易变化的模块进行抽象并封装起来,从这个点来看,java8新引入的函数式接口就是基于这个思想进行设计的。
2. 函数式接口...
1. 函数式接口的理解
根据重构的思想,需要把容易变化的模块进行抽象并封装起来,从这个点来看,java8新引入的函数式接口就是基于这个思想进行设计的。
2. 函数式接口定义
2.1 自定义如下
需要functionalinterface关键字显示声明:
@functionalinterface public interface appleinterface { public void test(); }
2.2 系统预定义
java.util.function.consumer; java.util.function.function; java.util.function.predicate; java.util.function.supplier;
可以去查看源码了解具体的细节,这几个接口包括了常用的一些场景,一般可满足需要
3. 函数式接口的使用
函数式接口一般使用前需要先定义,也可以使用系统预定义的几个函数式接口
函数式接口的使用和使用一个变量没有区别,显示声明定义,格式如下:
functioninterface interface=null;
这里的interface虽然看起来是一个变量,可是实际却是一段行为代码,用于执行具体的业务逻辑,可以*在方法接口间传递,也可以直接执行
interface.dosomething();
如定义函数式接口为参数的接口:
public void filter(functioninterface interface) { interface.dosomething(); }
4. 函数式接口练习
4.1 自定义实体类apple
public class apple { private string color; private float weight; public apple(string color, float weight) { this.color = color; this.weight = weight; } public string getcolor() { return color; } public void setcolor(string color) { this.color = color; } public float getweight() { return weight; } public void setweight(float weight) { this.weight = weight; } }
4.2 自定义函数式接口
该接口有一个test方法,不接收任何参数,也没有任何返回
@functionalinterface public interface appleinterface { public void test(); }
4.3 测试自定义函数式接口
@test public void definefunctioninterface(){ //自定义函数式接口 appleinterface at=()->system.out.println("define functioninterface appleinterface."); at.test(); }
至此,就完成一个很简单的函数式接口的定义和调用
4.4 系统预定义函数式接口
consumer<t>:该接口接收一个对象t,返回void,测试如下
@test public void consumertest(){ consumer<apple> consumer=(apple app)->{system.out.println(app.getcolor()+","+app.getweight());}; list<apple> apps=arrays.aslist(new apple("red", 120),new apple("blue", 80), new apple("green",100)); consumerapple(apps,consumer); } public void consumerapple(list<apple> apps,consumer<apple> c){ for(apple app:apps){ c.accept(app); } }
supplier<t>:该接口不接收任何参数,返回一个对象t,测试如下:
@test public void suppliertest(){ supplier<apple> supplier=()->{return new apple("hello supplier",999);}; apple app=supplier.get(); system.out.println(app.getcolor()+","+app.getweight()); }
predicate<t>:该接口接收一个对象t,返回一个boolean
@test public void predicatetest(){ //系统预定义函数式接口测试 predicate<apple> p1=(apple a)->{if(a.getweight()>90) return true;return false;}; predicate<apple> p2=(apple a)->{if(a.getcolor().equals("blue")) return true;return false;}; list<apple> apps=arrays.aslist(new apple("red", 120),new apple("blue", 80), new apple("green",100)); filterapple(apps,p1);//筛选重量大于90g的苹果 filterapple(apps,p2);//筛选蓝色的苹果 } public void filterapple(list<apple> apps,predicate<apple> p){ for(apple app:apps){ if(p.test(app)){ system.out.println(app.getcolor()+","+app.getweight()); } } }
function<t,r>: 该接口接收一个对象t,经过转换判断,返回一个对象r
@test public void functiontest(){ function<string,apple> function=(string s)->{return new apple(s,666);}; apple app=function.apply("red"); system.out.println(app.getcolor()+","+app.getweight()); app=function.apply("green"); system.out.println(app.getcolor()+","+app.getweight()); }
以上这篇基于java8 函数式接口理解及测试就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。