• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

基于Java8 函数式接口理解及测试

java 搞代码 4年前 (2022-01-05) 112次浏览 已收录 0个评论

下面小编就为大家带来一篇基于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:该接口接收一个对象T,返回void,测试如下

 @Test public void ConsumerTest(){ Consumer consumer=(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:该接口不接收任何参数,返回一个对象T,测试如下:

 @Test public void SupplierTest(){ Supplier supplier=()->{return new Apple("hello supplier",999);}; Apple app=supplier.get(); System.out.println(app.getColor()+","+app.getWeight()); }

Predicate:该接口接收一个对象T,返回一个Boolean

 @Test public void PredicateTest(){ //系统预定义函数式接口测试 Predicate p1=(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: 该接口接收一个对象T,经过转换判断,返回一个对象R

 @Test public void FunctionTest(){ Function<span style="color:transparent">来源gaodai#ma#com搞*!代#%^码$网</span> 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 函数式接口理解及测试就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持gaodaima搞代码网

以上就是基于Java8 函数式接口理解及测试的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:基于Java8 函数式接口理解及测试

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址