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

java-函数式编程-jdk

背景

  • 函数式接口很简单,但是不是每一个函数式接口都需要我们自己来写
  • jdk 根据 有无参数,有无返回值,参数的个数和类型,返回值的类型 提前定义了一些通用的函数式接口

IntPredicate

  • 参数:有一个,类型是int类型
  • 返回值:返回值是boolean类型 所以是Predicate
    在这里插入图片描述
IntPredicate type1_1 = (int a) -> (a & 1) == 0;@FunctionalInterface
interface MyInterface1{boolean   op(int arg1);
}

IntBinaryOperator

  • 参数:两个int 所以是Binary
  • 返回值:和参数一样是int 所以是Operator
IntBinaryOperator type4_1 = (int a, int b) -> a + b;
IntBinaryOperator type5_1 = (int a, int b) -> a * b;@FunctionalInterface
interface MyInterface3{int op(int num1, int num2);
}

Supplier

  • 参数:无
  • 返回值:没有参数但是有返回值,所以是Supplier
 Supplier<Student> type6_2 = () -> new Student("张三", 18);Supplier<List<Student>> type7_2 = () -> {List<Student> list = new ArrayList<>();list.add(new Student("张三", 18));list.add(new Student("李四", 19));return list;};// MyInterface5和MyInterface4是可以使用泛型合并的
@FunctionalInterface
interface MyInterface5_1<T>{T op() ;
}

Function

  • 有参数,也有返回值
  • 但是参数类型和返回值类型不一样,所以是Function
Function<Student,String> type8_2 = (Student student) -> student.getName();
Function<Student,Integer> type9_2 = (Student student) -> student.getage();//MyInterface6和MyInterface7是可以使用泛型合并的
// O是返回值类型,I是入参类型
@FunctionalInterface
interface MyInterface8<I,O>{O op(I inObj) ;
}

常见的函数式接口

在这里插入图片描述

命名规则

在这里插入图片描述

练习

  • 获取list中的偶数数据
  • 返回的是Boolean类型的结果,使用进行Predicate接口接受
  public static void main(String[] args) {List<Integer> list = new ArrayList<>();for (int i = 0; i < 10; i++) {list.add(i);}// 获取偶数List<Integer> evenNumbers = filter(list, i -> i % 2 == 0);System.out.println(evenNumbers);}// 传递两个参数:一个列表和一个 Predicate 接口,对列表进行过滤static List<Integer> filter(List<Integer> list, Predicate<Integer> predicate) {List<Integer> result = new ArrayList<>();for (Integer i : list) {// 使用 Predicate 的 test() 方法判断元素是否满足条件 if (predicate.test(i)) {result.add(i);}}return result;}
http://www.lryc.cn/news/346520.html

相关文章:

  • qiankun实现微前端,vue3为主应用,分别引入vue2和vue3微应用
  • 写了 1000 条 Prompt 之后,我总结出了这 9 个框架【建议收藏】
  • 事件代理 浅谈
  • 一对多在线教育系统,疫情后,在线教育有哪些变革?
  • RabbitMQ(安装配置以及与SpringBoot整合)
  • JUC下的BlockingQueue详解
  • ChatGPT理论分析
  • 算法提高之魔板
  • 服务器内存占用不足会怎么样,解决方案
  • elasticsearch文档读写原理大致分析一下
  • 1 开发环境
  • 云视频,也称为视频云服务,是一种基于云计算技术理念的视频流媒体服务
  • [Vision Board创客营]--使用openmv识别阿尼亚
  • 【Linux:lesson1】的基本指令
  • 20240511日记
  • 蓝桥杯成绩已出
  • .kat6.l6st6r勒索病毒数据怎么处理|数据解密恢复
  • Spring Batch 是什么?主要用于什么场景?
  • SQL-慢查询的定位及优化
  • 练习题(2024/5/11)
  • linux系统服务器中常见故障及排查方法
  • 产品人生(5):从“敏捷开发”到“四化时间管理法”
  • 超级好看的html网站维护源码
  • 从零开始搭建Springboot项目脚手架2:配置文件、返回值、日志等
  • Java web第五次作业
  • Unity使用ToggleGroup对多个Toggle进行管理时,初始化默认选项失效的问题
  • Retrofit同步请求直接返回目标对象
  • Android GPU渲染屏幕绘制显示基础概念(1)
  • Mac电脑设置hosts的方法
  • 数据分析——大数据伦理风险分析