扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
怎么对Java8中的函数式接口进行测试?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
站在用户的角度思考问题,与客户深入沟通,找到右江网站设计与右江网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站设计、网站制作、企业官网、英文网站、手机端网站、网站推广、申请域名、虚拟主机、企业邮箱。业务覆盖右江地区。
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
@Test public void ConsumerTest(){ Consumerconsumer=(Apple app)->{System.out.println(app.getColor()+","+app.getWeight());}; List apps=Arrays.asList(new Apple("red", 120),new Apple("blue", 80), new Apple("green",100)); ConsumerApple(apps,consumer); } public void ConsumerApple(List apps,Consumer c){ for(Apple app:apps){ c.accept(app); } }
Supplier
@Test public void SupplierTest(){ Suppliersupplier=()->{return new Apple("hello supplier",999);}; Apple app=supplier.get(); System.out.println(app.getColor()+","+app.getWeight()); }
Predicate
@Test public void PredicateTest(){ //系统预定义函数式接口测试 Predicatep1=(Apple a)->{if(a.getWeight()>90) return true;return false;}; Predicate p2=(Apple a)->{if(a.getColor().equals("blue")) return true;return false;}; List 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 apps,Predicate p){ for(Apple app:apps){ if(p.test(app)){ System.out.println(app.getColor()+","+app.getWeight()); } } }
Function
@Test public void FunctionTest(){ Functionfunction=(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中的函数式接口进行测试问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联行业资讯频道了解更多相关知识。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流