当前位置: 首页 > 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.xdnf.cn/news/1116343.html

相关文章:

  • 【LeetCode100】--- 4.移动零【复习回顾】
  • mmap映射文件
  • 理解 Robots 协议:爬虫该遵守的“游戏规则”
  • HTML 标题标签
  • AI驱动的软件工程(上):人机协同的设计与建模
  • Python 学习之路(十)--常见算法实现原理及解析
  • 深度学习-循环神经网络RNN
  • 谷歌推出Vertex AI Memory Bank:为AI智能体带来持久记忆,支持连续对话
  • MongoDB性能优化实战指南:原理、实践与案例
  • RedisJSON 技术揭秘(五)`JSON.ARRPOP` 原子弹出 修改数组的终极手段
  • Java设计模式之行为型模式(命令模式)介绍与说明
  • 串口A和S的含义以及RT的含义
  • 深入理解观察者模式:构建松耦合的交互系统
  • 设计模式深度解析:单例、工厂、适配器与代理模式
  • Word中的批注显示与修订显示
  • STM32 | HC-SR04 超声波传感器测距
  • 洛谷 P13014:[GESP202506 五级] 最大公因数
  • CentOS系统下前后端项目部署攻略
  • 【MLLM】多模态理解GLM-4.1V-Thinking模型
  • 深度学习图像分类数据集—水质量识别分类
  • java.net.InetAddress
  • Extended Nested Arrays for Consecutive Virtual Aperture Enhancement
  • RHCIA第二次综合实验:OSPF
  • 印度纱丽变革:传统靛蓝工艺在无性别斗篷中的延续
  • CMSIS(Cortex Microcontroller Software Interface Standard)ARM公司为 Cortex-M 系列处理器
  • docker 设置代理以及配置镜像加速
  • VISUALBERT:一个简单且高效的视觉与语言基线模型
  • JavaScript加强篇——第九章 正则表达式高级应用(终)
  • java+vue+SpringBoo中小型制造企业质量管理系统(程序+数据库+报告+部署教程+答辩指导)
  • archive/tar: unknown file mode ?rwxr-xr-x