当前位置: 首页 > news >正文

【Java8新特性】二、函数式接口

这里写自定义目录标题

  • 一、什么是函数式接口
  • 二、自定义函数式接口
  • 三、作为参数传递 Lambda 表达式
  • 四、四大内置核心函数式接口
      • 1、消费形接口
      • 2、供给形接口
      • 3、函数型接口
      • 4、断言形接口

一、什么是函数式接口

  • 只包含一个抽象方法的接口,称为函数式接口。
  • 你可以通过 Lambda 表达式来创建该接口的对象。
  • 我们可以在任意函数式接口上使用 @FunctionalInterface 注解,这样做可以检查它是否是一个函数式接口,同时 javadoc 也会包含一条声明,说明这个接口是一个函数式接口

二、自定义函数式接口

@FunctionalInterface
public interface MyFunction {public String getValue(String str);
}@FunctionalInterface
public interface MyFunc<T> {public R getValue(T t);
}

三、作为参数传递 Lambda 表达式

@FunctionalInterface
public interface MyFunc<T> {public T getValue(T t);
}public String toUpperString(MyFunc<String> mf, String str) {mf.getValue(str)
}//Lambda 表达式作为参数传递
String str1 = toUpperString(str -> str.toUpperCase(),"abcd");
sout(str1 )

四、四大内置核心函数式接口

在这里插入图片描述

1、消费形接口

    //Consumer: 消费型接口@Testpublic void test1(){happy(35,d -> System.out.println("花费了"+d));}public void happy(double money, Consumer<Double> con){con.accept(money);}

2、供给形接口

    @Testpublic void test2(){List<Integer> numberList = getNumberList(10, () -> (int) (Math.random() * 100));for(Integer num : numberList){System.out.println(num);}}//需求:产生一些整数,并放在集合中public List<Integer> getNumberList(int num, Supplier<Integer> sup){List<Integer> list = new ArrayList<>();for(int i = 0; i < num ; i++){list.add(sup.get());}return list;}

3、函数型接口

    @Testpublic void test3(){String result = Strandler("\t\thello world,i like china!", str -> str.trim());System.out.println(result);}//需求:用于处理字符串public String Strandler(String str, Function<String,String> fun){return fun.apply(str);}

4、断言形接口

 @Testpublic void test4(){List<String> employees = Arrays.asList("hello","houchen","shuchenxi");List<String> list = filterStr(employees, str -> str.length() >3);for(String s : list){System.out.println(s);}}//需求:将满足条件的字符串放入集合中public List<String> filterStr(List<String> list, Predicate<String> pre){List<String> stringList = new ArrayList<>();for(String str : list){if(pre.test(str)){stringList.add(str);}}return stringList;}
http://www.lryc.cn/news/337598.html

相关文章:

  • 供应RTC5606H 芯片现货
  • 洛谷-P1596 [USACO10OCT] Lake Counting S
  • 基于双向长短期神经网络BILSTM的发生概率预测,基于GRU神经网络的发生概率预
  • 对OceanBase中的配置项与系统变量,合法性检查实践
  • YOLOv8绝缘子边缘破损检测系统(可以从图片、视频和摄像头三种方式检测)
  • 【vim 学习系列文章 18 -- 选中行前后增加两行】
  • 分布式系统接口限流方案
  • Flutter仿Boss-6.底部tab切换
  • 深入理解机器学习:用Python构建您的第一个预测模型
  • redisson与redis集群检测心跳机制原理
  • 部署Redis
  • 性能测试-数据库优化二(SQL的优化、数据库拆表、分表分区,读写分离、redis)
  • 44.基于SpringBoot + Vue实现的前后端分离-汽车租赁管理系统(项目 + 论文PPT)
  • 2024届数字IC秋招-华为机试-数字芯片-笔试真题和答案(五)(含2022年和2023年)
  • Lua语法(四)——协程
  • LangChain-15 Manage Prompt Size 管理上下文大小,用Agent的方式询问问题,并去百科检索内容,总结后返回
  • OR-TOOL 背包算法
  • 前端h5录音
  • Android Studio 使用Flutter开发第一个Web页面(进行中)
  • Vue.js组件精讲 第2章 基础:Vue.js组件的三个API:prop、event、slot
  • npm install 报 ERESOLVE unable to resolve dependency tree 异常解决方法
  • RPC还是HTTP
  • Conda 常用命令总结
  • Spring MVC 文件上传和下载
  • WSL访问adb usb device
  • CDF与PDF(描述随机变量的分布情况)
  • react项目中需要条形码功能,安装react-barcode使用时报错
  • ES6基础(JavaScript基础)
  • [蓝桥杯] 纸张尺寸(C语言)
  • AI推介-多模态视觉语言模型VLMs论文速览(arXiv方向):2024.04.05-2024.04.10