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

jdk8新特性----Lambda表达式

一、介绍

1、简介

Java的Lambda表达式是Java 8引入的一个特性,它支持函数式编程,允许将函数作为方法的参数或返回值,从而简化了匿名内部类的使用,并提供了对并行编程的更好支持。

2、语法

Lambda表达式的使用前提是存在一个接口,该接口中有且只有一个抽象方法。在主方法中可以通过创建接口的匿名内部类或使用Lambda表达式来调用该接口的方法。

Lambda表达式的语法为(parameter_list) -> {function_body},其中->将参数和实现逻辑分离,()中的部分是需要传入Lambda体中的参数,{}中的部分接收来自()中的参数,并完成一定的功能。

3、优点

Lambda表达式的主要优势包括:

  • 简化匿名内部类的使用,使代码更加简洁明了。
  • 支持函数式编程,允许函数作为第一类对象进行传递和操作。
  • 促进并行编程,因为函数式编程中的纯函数天然具备无副作用的特性,使得在并行编程中更容易实现可靠的多线程和并行处理。
4、用途

Lambda表达式主要用于函数式接口,即只包含一个抽象方法的接口,可以使用@FunctionalInterface注解进行标识。常用场景有:

  • 创建Runnable实例:Runnable runnable = () -> {System.out.println("Hello, Lambda!");};
  • 实现Consumer接口:numbers.forEach(n -> System.out.println(n));
  • 实现Predicate接口:filteredNames = names.stream().filter(name -> name.length() > 5).collect(Collectors.toList());
  • 创建线程:new Thread(() -> System.out.println("haha")).start();

二、使用场景

1、集合遍历
    List<String> stringList = Arrays.asList("apppe","organge","banana");// 原来的方式for (String s : stringList) {System.out.println(s);}// lambda 表达式stringList.forEach(s->{System.out.println(s);});
2、排序

注意:-1:代表第一个对象,1:代表第二个对象 

 List<Dog> dogs = Arrays.asList(new Dog[]{new Dog("n1", 12),new Dog("n2", 14),new Dog("n3", 11)});// 方法1Collections.sort(dogs, new Comparator<Dog>() {@Overridepublic int compare(Dog o1, Dog o2) {return o1.getAge()>o2.getAge()?-1:1;}});// 方法2Collections.sort(dogs,(o1,o2)->(o1.getAge()>o2.getAge()?-1:1));dogs.forEach(s->{System.out.println(s.getAge());});
3、过滤
         List<String> stringList = Arrays.asList("apple","organge","banana");// 获取集合中所有以“a”开头的字符串// 原来的方式List<String> newList = new ArrayList<String>();for (String s : stringList) {if(s.startsWith("a")){newList.add(s);}}// lambda表达式List<String> newList2 = stringList.stream().filter(s -> {if(s.startsWith("a")){return  true;}return false;}).collect(Collectors.toList());
4、映射
         List<String> stringList = Arrays.asList("apple","organge","banana");// 获取集合中所有字符串的长度// 原来的方式List<Integer> newList = new ArrayList<Integer>();for (String s : stringList) {newList.add(s.length());}// lambda表达式List<Integer> newList2 = stringList.stream().map(s -> {return s.length();}).collect(Collectors.toList());// lambda 表达式newList2.forEach(s->{System.out.println(s);});
5、规约

相关文章:

jdk8新特性----Lambda表达式

一、介绍 1、简介 Java的Lambda表达式是Java 8引入的一个特性&#xff0c;它支持函数式编程&#xff0c;允许将函数作为方法的参数或返回值&#xff0c;从而简化了匿名内部类的使用&#xff0c;并提供了对并行编程的更好支持。 2、语法 Lambda表达式的使用前提是存在一…...

在STM32中用寄存器方式点亮流水灯

文章目录 实验资料一、对寄存器的理解1.通俗认识寄存器2.深入了解寄存器&#xff08;1&#xff09;端口配置低寄存器&#xff08;配置0到7引脚的寄存器&#xff09;&#xff08;2&#xff09;端口配置高寄存器&#xff08;配置8到15引脚&#xff09; 3.GPIO口的功能描述 二、配…...

TCP(TCP客户端、服务器如何通信)

一、TCP介绍 TCP的特点&#xff1a; 面向连接的协议&#xff1a;TCP是一种可靠的、面向连接的协议&#xff0c;在通信之前需要建立连接&#xff0c;以确保数据的可靠传输。这意味着在传输数据之前&#xff0c;发送方和接收方之间需要建立一条可靠的连接通道。流式协议&#x…...

pdf 文件版面分析--PyMuPDF (python 文档解析提取)

1.介绍 PyMuPDF 和Fitz 是用于Python中处理PDF文件的相关模块。Fitz是P有MuPDF的字模块。提供一个简化和封装版本的P有MuPDF功能。 关系&#xff1a; PyMuPDF&#xff1a; 提供广泛的功能&#xff0c;用于操作PDF文档&#xff0c; 包括方便的高级函数与底层操作Fitz &#x…...

sql update 多表关联 inner join

当您需要更新一个表或者多个表中的数据&#xff0c;而多个表又存在关联时&#xff0c;可以使用 INNER JOIN 子句将多个表关联起来&#xff0c;并使用 SET更新。 格式如下&#xff1a; UPDATE table1 INNER JOIN table2 ON table1.column1 table2.column1 SET table1.column2…...

【OceanBase诊断调优】—— 租户资源统计项及其查询方法

本文主要介绍 OceanBase 数据库中租户资源统计项及其查询方法。 适用版本 OceanBase 数据库 V4.1.x、V4.2.x 版本。 CPU 资源统计项 逻辑 CPU 使用率&#xff08;线程处理请求的时间占比&#xff09;。 通过虚拟表 __all_virtual_sysstat 在 SYS 系统租户下&#xff0c;查看…...

【一键录音,轻松转换:用Python打造个性化音频记录工具】

在数字化时代,音频记录已成为日常学习、工作和娱乐不可或缺的一部分。想象一下,只需简单按下几个键,即可随时随地捕捉灵感,记录会议要点,或是珍藏孩子的童言稚语。本文将引领您步入Python编程的奇妙世界,展示如何借助几个强大的库,构建一个既简单又实用的音频录制及转换…...

Java类与对象(一)

类的定义与使用 在Java中使用关键字class定义一个类&#xff0c;格式如下&#xff1a; class 类名{// 成员变量/字段/属性//成员方法/行为 }Java中类和c语言中的结构体有点类似&#xff0c; 在Java中类名一般采用大驼峰&#xff08;每个首字母大写&#xff09;的形式&#xf…...

python中的装饰器,例子说明

在Python中&#xff0c;嵌套装饰器是指在一个函数上应用多个装饰器。每个装饰器都可以为函数添加一些特定的功能。以下是一个稍微复杂一些的例子&#xff0c;我们将创建一个记录日志和验证权限的嵌套装饰器。 ### 例子&#xff1a;记录日志和权限验证的嵌套装饰器 假设我们正…...

Leetcode经典题目之用队列实现栈

P. S.&#xff1a;以下代码均在VS2019环境下测试&#xff0c;不代表所有编译器均可通过。 P. S.&#xff1a;测试代码均未展示头文件stdio.h的声明&#xff0c;使用时请自行添加。 目录 1、题目展示2、题目分析3、完整代码演示4、结语 1、题目展示 前面我们了解过如何实现队列…...

DBSCAN聚类算法

目录 背景DBSCAN算法DBSCAN算法原理DBSCAN算法基本步骤DBSCAN算法调优DBSCAN算法优缺点参考文献 背景 如果有车队在某一片区域经常规律性作业&#xff0c;现在要让你来绘制这一片的路网&#xff0c;你会选择让一辆车从头到尾把所有路网跑一遍还是基于历史轨迹点通过技术手段构…...

【tauri】安装

https://blog.csdn.net/freewebsys/article/details/136092092 1 安装nodejs curl -sL https://deb.nodesource.com/setup_18.x -o nodesource_setup.sh sudo bash nodesource_setup.sh sudo apt install nodejs # 查看版本 node -v2 安装webkit2 sudo apt update sudo apt i…...

(Java)心得:LeetCode——19.删除链表的倒数第 N 个节点

一、原题 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5]示例 2&#xff1a; 输入&#xff1a;head [1], n 1 输出&#xff1a;[]示例 3&…...

树莓派安装opencv

安装opencv 上述步骤完成后&#xff0c;输入以下代码(基于python3) sudo apt-get install python3-opencv -y不行的话&#xff0c;试试换源&#xff0c;然后 sudo apt-get update成功&#xff01; 测试opencv是否安装成功 输入 python3 然后再输入 import cv2 没有报错就…...

bert 的MLM框架任务-梯度累积

参考&#xff1a;BEHRT/task/MLM.ipynb at ca0163faf5ec09e5b31b064b20085f6608c2b6d1 deepmedicine/BEHRT GitHub class BertConfig(Bert.modeling.BertConfig):def __init__(self, config):super(BertConfig, self).__init__(vocab_size_or_config_json_fileconfig.get(vo…...

Nginx配置/.well-known/pki-validation/

当你需要在Nginx上配置.well-known/pki-validation/时&#xff0c;这通常是为了支持SSL证书的自动续订或其他验证目的。以下是配置步骤&#xff1a; 创建目录结构&#xff1a; 在你的网站根目录下创建一个名为.well-known的目录&#xff08;SSL证书申请之如何创建/.well-known/…...

iOS LQG开发框架(持续更新)

基本规则 开发便利性为前提&#xff0c;妥协性能可维护性为前提可读性MVC各部分职责一定要清晰&#xff0c;controll类里面功能尽量抽离成helper&#xff0c;功能一定要清晰&#xff0c;这个非常重要&#xff0c;对代码可读性提升非常高方法内部尽量使用局部变量&#xff0c;最…...

Python 自动化脚本系列:第3集

21. 使用 cryptography 自动化文件加密 Python 的 cryptography 库提供了一种安全的方式&#xff0c;使用对称加密算法对文件进行加密和解密。你可以自动化加密和解密文件的过程来保护敏感数据。 示例&#xff1a;文件加密和解密 假设你想使用对称加密算法加密一个文件&…...

Matlab-粒子群优化算法实现

文章目录 一、粒子群优化算法二、相关概念和流程图三、例题实现结果 一、粒子群优化算法 粒子群优化算法起源于鸟类觅食的经验&#xff0c;也就是一群鸟在一个大空间内随机寻找食物&#xff0c;目标是找到食物最多的地方。以下是几个条件: (1) 所有的鸟都会共享自己的位置以及…...

python 新特性

文章目录 formatted字符串字面值formatted字符串支持 字符串新方法变量类型标注二进制表示中数字为1的数量统计字典的三个方法新增mapping属性函数zip()新增strict参数dataclass字典合并match 语法 formatted字符串字面值 formatted字符串是带有’f’字符前缀的字符串&#xf…...

AUTO TECH China 2026广州汽车零部件展:从整机集成迈向核心部件的产业跃升

AUTO TECH China 2026广州汽车零部件展&#xff1a;从整机集成迈向核心部件的产业跃升当新能源汽车渗透率突破50%大关、汽车产业正经历百年未有的结构性变革之际&#xff0c;整车的差异化竞争优势正悄然从系统集成向功能模块与核心单元下沉。从一体化压铸车身结构件、高精度齿轮…...

检索增强生成RAG基础架构与手动模拟

检索增强生成RAG基础 什么是RAG? 检索增强生成(RAG)是指对大型语言模型输出进行优化&#xff0c;使其能够在生成响应之前引用训练数据来源之外的权威知识库。大型语言模型(LLM)用海量数据进行训练&#xff0c;使用数十亿个参数为回答问题、翻译语言和完成句子等任务生成原始输…...

从ZEMAX到SOLIDWORKS:手把手教你搞定红外平行光管的跨软件光机设计流程

从ZEMAX到SOLIDWORKS&#xff1a;红外平行光管光机协同设计全流程解析 在光学工程领域&#xff0c;红外平行光管的设计往往需要跨越光学仿真与机械实现两大专业领域。这种"光机协同设计"过程既考验工程师对光学原理的理解&#xff0c;又要求熟练掌握专业软件间的数据…...

iGnav RTK/INS紧组合:从算法理论到代码实现的深度解析

1. RTK/INS紧组合技术概述 RTK&#xff08;实时动态定位&#xff09;和INS&#xff08;惯性导航系统&#xff09;的紧组合技术是当前高精度导航定位领域的重要发展方向。简单来说&#xff0c;RTK通过接收卫星信号实现厘米级定位&#xff0c;但在信号遮挡环境下性能下降&#xf…...

最新彩虹云商城重构版 虚拟商城 在线下单 自动发货

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 彩虹云商城重构版 【重构】数据面板显示样式和布局 【优化】一级分类提示&#xff0c;更加详细&#xff0c;添加对模板导航引入说明 【优化】系统概览页面 【优化】供货商商品列表显示…...

如何快速掌握League-Toolkit:英雄联盟玩家的终极辅助工具指南

如何快速掌握League-Toolkit&#xff1a;英雄联盟玩家的终极辅助工具指南 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League-Toolkit是一款…...

顶伯在线语音工具背后的技术力量:AI语音合成与深度学习解析

顶伯在线语音工具背后的技术力量在人工智能浪潮中&#xff0c;语音交互正成为人机沟通的核心方式。顶伯作为行业领先的在线语音工具&#xff0c;凭借自主研发的深度学习架构&#xff0c;将文字转化为高度自然的语音&#xff0c;广泛应用于有声阅读、智能客服、教育辅助等领域。…...

Netduino Plus 2硬实时驱动WS2812:托管环境下的纳秒级GPIO控制实战

1. 项目概述&#xff1a;当托管环境遇上纳秒级时序如果你玩过嵌入式开发&#xff0c;尤其是用Arduino驱动过WS2812&#xff08;也就是Adafruit的NeoPixels&#xff09;&#xff0c;那你肯定知道那套经典的Adafruit_NeoPixel库&#xff0c;几行代码就能让灯带流光溢彩。但当你把…...

Adafruit Fritzing元件库安装与使用指南:提升硬件设计效率

1. 项目概述&#xff1a;为什么你需要Adafruit Fritzing元件库&#xff1f;如果你玩过Arduino或者树莓派&#xff0c;肯定对Adafruit这家公司不陌生。他们出品的各种传感器、显示屏和扩展板&#xff0c;几乎成了开源硬件项目的“标准件”。但每次在Fritzing里画电路图&#xff…...

微积分入门书籍之日韩篇

微积分的奇幻旅程(2020.02) 超简单的微积分 函数、图、斜率、面积 &#xff0c;一小时掌握微积分的本质&#xff08;2024.03&#xff09; 简单微积分 学校未教过的超简易入门技巧(2018.07) 数学女孩的秘密笔记&#xff1a;微分篇 数学女孩的秘密笔记&#xff1a;积分篇 超图解趣…...