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

发布时间 - 2026-01-11 02:42:21    点击率:

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 函数式接口理解及测试就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# java8  # 函数式接口  # 实例详解Java8函数式接口  # 一文带你掌握Java8中函数式接口的使用和自定义  # Java8中常见函数式接口的使用示例详解  # 详解JAVA8 函数式接口  # 4个Java8中你需要知道的函数式接口分享  # Java8需要知道的4个函数式接口简单教程  # Java 8四大函数式接口的定义及使用示例详解  # 自定义  # 给大家  # 是一个  # 几个  # 却是  # 不接收  # 也没  # 希望能  # 很简单  # 可以直接  # 可以使用  # 这篇  # 这几个  # 小编  # 大家多多  # 有一个  # 重构  # 有任何  # 实体类  # 一般可 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 中山网站推广排名,中山信息港登录入口?  桂林网站制作公司有哪些,桂林马拉松怎么报名?  浅述节点的创建及常见功能的实现  javascript中闭包概念与用法深入理解  如何在Ubuntu系统下快速搭建WordPress个人网站?  Laravel如何与Pusher实现实时通信?(WebSocket示例)  如何为不同团队 ID 动态生成多个“认领值班”按钮  Android 常见的图片加载框架详细介绍  Android GridView 滑动条设置一直显示状态(推荐)  如何在七牛云存储上搭建网站并设置自定义域名?  如何在万网开始建站?分步指南解析  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  详解vue.js组件化开发实践  新三国志曹操传主线渭水交兵攻略  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】  北京的网站制作公司有哪些,哪个视频网站最好?  在Oracle关闭情况下如何修改spfile的参数  如何用腾讯建站主机快速创建免费网站?  Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验  香港服务器选型指南:免备案配置与高效建站方案解析  制作电商网页,电商供应链怎么做?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践  MySQL查询结果复制到新表的方法(更新、插入)  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  用v-html解决Vue.js渲染中html标签不被解析的问题  如何快速配置高效服务器建站软件?  如何快速搭建FTP站点实现文件共享?  北京网站制作的公司有哪些,北京白云观官方网站?  linux top下的 minerd 木马清除方法  Laravel如何实现API版本控制_Laravel版本化API设计方案  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  如何快速搭建虚拟主机网站?新手必看指南  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  详解Android——蓝牙技术 带你实现终端间数据传输  Android使用GridView实现日历的简单功能  php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】  Win11怎么开启自动HDR画质_Windows11显示设置HDR选项  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  历史网站制作软件,华为如何找回被删除的网站?  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  Python进程池调度策略_任务分发说明【指导】  Laravel如何与Inertia.js和Vue/React构建现代单页应用  html5的keygen标签为什么废弃_替代方案说明【解答】  Laravel如何处理和验证JSON类型的数据库字段  如何自定义建站之星模板颜色并下载新样式?  企业网站制作这些问题要关注  Laravel storage目录权限问题_Laravel文件写入权限设置