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

lambdastream深入剖析

语雀版:https://www.yuque.com/g/mingrun/embiys/eabrg26xsx4x8u4k/collaborator/join?token=TU6BLu8LBQxL8czK&source=doc_collaborator# 《lambda&stream深入剖析》

基础概念

  1. lambda在编程中的叫法是匿名函数(Anonymous Function),匿名函数(英语:Anonymous Function)在计算机编程中是指一类无需定义标识符(函数名)的函数或子程序。
    Lambda 在编程语言中往往是一个匿名函数,也就是说Lambda 是一个抽象概念,而编程语言提供了配套支持,比如在 Java 中其实为Lambda 进行配套的就是函数式接口通过函数式接口生成匿名类和方法进行Lambda 式的处理。
  2. Lambda所能提供的优点 在java中则由函数式接口所提供,函数式接口提供了一些通用性的能力,这些接口在sdk中有一套完整的实现,或者说是最佳实践,这就是stream流
  3. 句法
() -> System.out.println("零参数 lambda");
p -> System.out.println("一个参数:" + p);
(p1 [,p2,p3,....pn]) -> System.out.println("多个参数:" + p1 + ", " + p2 + ... + pn);
(parameter1, parameter2) -> { code block [return] }
  1. 方法引用
//静态方法
Consumer<String> c = [ (s) -> System.out.println(s);  <=>  System.out::println; ]
//实例方法
List<String> list = Lists.newArrayList();
Consumer<String> c = [ (e) -> list.add(e);  <=>  list::add; ]
//构造器 :: new
Supplier<List<String>> s = [ () -> new ArrayList<>(); <=> ArrayList::new; ]

原生函数式接口

@FunctionalInterface注解
有且只有一个抽象方法的接口被称为函数式接口,函数式接口适用于函数式编程的场景,Lambda就是Java中函数式编程的体现,可以使用Lambda表达式创建一个函数式接口的对象,一定要确保接口中有且只有一个抽象方法,这样Lambda才能顺利的进行推导。
与@Override 注解的作用形似,Java 8中专门为函数式接口引入了一个新的注解:@FunctionalInterface 。
该注解可用于一个接口的定义上,一旦使用该注解来定义接口,编译器将会强制检查该接口是否确实有且仅有一个抽象方法(equal和hashcode方法不算),否则将会报错。但是这个注解不是必须的,只要符合函数式接口的定义,那么这个接口就是函数式接口。
  1. Consumer<T>: 消费性接口:
    1. 消费(1..n 入参, 无返回)
    2. 应用:list.foreach(System.out::println); //打印数组
  1. Supplier<T>: 供给型接口
    1. 获取(无入参,有返回)
    2. 通过泛型 T 定义了一个返回值类型,但是没有入参,它代表你可以针对调用方获取某个值,比较典型的例子是 Stream 中的 collect 方法,通过自定义传入我们想要取得的某种对象进行对象收集。
      List<String> list = Stream.of("a", "b", "c").collect(Collectors.toList());
http://www.lryc.cn/news/586979.html

相关文章:

  • Dubbo-Admin 安装与使用指南:可视化管理 Dubbo 服务
  • uView UI 组件大全
  • MySQL优化高手笔记
  • Agent比较出名的论文整理
  • flask校园学科竞赛管理系统-计算机毕业设计源码12876
  • 详解大模型的位置编码-positional encoding
  • AWS Lambda Container 方式部署 Flask 应用并通过 API Gateway 提供访问
  • 【LeetCode100】--- 5.盛水最多的容器【复习回顾】
  • 1.1.5 模块与包——AI教你学Django
  • 【SCI 4区推荐】《Journal of Visual Communication and Image Representation》
  • 反激变换器设计全流程(一)——电路拓扑及工作流程
  • fatal: active `post-checkout` hook found during `git clone`
  • 小车避障功能的实现(第七天)
  • 零基础入门物联网-远程门禁开关:软件安装
  • RabbitMQ 之仲裁队列
  • C++进阶-多态2
  • 全星质量管理QMS软件系统——汽车零部件制造业数字化转型的质量管理中枢
  • Redis 基础详细介绍(Redis简单介绍,命令行客户端,Redis 命令,Java客户端)
  • axios拦截器
  • 牛客周赛 Round 100
  • duckdb和pyarrow读写arrow格式的方法
  • 1.1.1+1.1.3 操作系统的概念、功能
  • 新手向:使用Python构建高效的日志处理系统
  • 深入理解Java中的hashCode方法
  • 磁悬浮轴承控制全攻略:从原理到实战案例深度解析
  • Python自动化:每日销售数据可视化
  • 闲庭信步使用图像验证平台加速FPGA的开发:第十二课——图像增强的FPGA实现
  • java+vue+SpringBoo中小型制造企业质量管理系统(程序+数据库+报告+部署教程+答辩指导)
  • Git Commit Message写错后如何修改?已Push的提交如何安全修复?
  • NoSQL 介绍