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

Lambda 表达式

一、Lambda 表达式简介

Lambda 表达式是一种简洁的函数式编程方式,用于实现只有一个方法的接口(例如函数式接口)。

基本语法

(parameters) -> expression
(parameters) -> { statements; }
  • 参数:可以有零个或多个参数。
  • 箭头操作符 (->):将参数与函数体分隔开。
  • 函数体:可以是单行表达式,也可以是包含多行语句的代码块。

示例

1. 使用匿名
Runnable runnable = new Runnable() {@Overridepublic void run() {System.out.println("传统方式:Hello World!");}
};
new Thread(runnable).start();
2. 使用 Lambda 表达式
Runnable runnable = () -> System.out.println("Lambda 表达式:Hello World!");
new Thread(runnable).start();

Lambda 表达式让代码更加简洁,提高了可读性。


二、Stream API 简介

Stream 是 Java 8 引入的一个强大的 API,用于处理集合中的数据流。它支持链式操作,允许我们以声明式的方式处理数据。

Stream 的操作类型

  1. 中间操作:返回一个新的 Stream,如 filtermapsorted 等。
  2. 终止操作:返回一个值或集合,如 collectreducecount 等。

三、常见的 Stream 操作示例

1. List 转 Set

我们可以通过 StreamList 转换为 Set,去除重复元素。

import java.util.*;
import java.util.stream.Collectors;public class ListToSetExample {public static void main(String[] args) {List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 2, 3, 1);// List 转 SetSet<Integer> uniqueNumbers = numbers.stream().collect(Collectors.toSet());System.out.println("去重后的 Set: " + uniqueNumbers);}
}

输出

去重后的 Set: [1, 2, 3, 4]

2. Map 转 List

通过 Stream 可以将 Map 的键、值或者键值对转为 List

import java.util.*;
import java.util.stream.Collectors;public class MapToListExample {public static void main(String[] args) {Map<Integer, String> map = new HashMap<>();map.put(1, "Java");map.put(2, "Python");map.put(3, "C++");// Map 的键转为 ListList<Integer> keys = map.keySet().stream().collect(Collectors.toList());// Map 的值转为 ListList<String> values = map.values().stream().collect(Collectors.toList());// Map 的键值对转为 ListList<String> entries = map.entrySet().stream().map(entry -> entry.getKey() + "=" + entry.getValue()).collect(Collectors.toList());System.out.println("键列表: " + keys);System.out.println("值列表: " + values);System.out.println("键值对列表: " + entries);}
}

输出

键列表: [1, 2, 3]
值列表: [Java, Python, C++]
键值对列表: [1=Java, 2=Python, 3=C++]

3. 过滤(Filter)

通过 filter 方法可以对集合中的元素进行筛选。

import java.util.*;
import java.util.stream.Collectors;public class FilterExample {public static void main(String[] args) {List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");// 筛选名字长度大于 3 的元素List<String> filteredNames = names.stream().filter(name -> name.length() > 3).collect(Collectors.toList());System.out.println("筛选后的名字: " + filteredNames);}
}

输出

筛选后的名字: [Alice, Charlie, David]

4. 求和

通过 reduce 方法可以对数字集合进行累加。

import java.util.*;public class SumExample {public static void main(String[] args) {List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);// 求和int sum = numbers.stream().reduce(0, Integer::sum);System.out.println("总和: " + sum);}
}

输出

总和: 15

5. 分组

通过 Collectors.groupingBy 方法可以对集合中的元素进行分组。

import java.util.*;
import java.util.stream.Collectors;public class GroupingExample {public static void main(String[] args) {List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David", "Daniel");// 按名字长度分组Map<Integer, List<String>> groupedByLength = names.stream().collect(Collectors.groupingBy(String::length));System.out.println("按名字长度分组: " + groupedByLength);}
}

输出

按名字长度分组: {3=[Bob], 5=[Alice, David], 7=[Charlie, Daniel]}

6. Map 和 Reduce 操作

  • Map:将元素映射为另一种类型。
  • Reduce:将多个值归约为一个值。
Map 示例
import java.util.*;public class MapExample {public static void main(String[] args) {List<String> names = Arrays.asList("alice", "bob", "charlie");// 将名字转换为大写List<String> upperCaseNames = names.stream().map(String::toUpperCase).collect(Collectors.toList());System.out.println("转换为大写: " + upperCaseNames);}
}

输出

转换为大写: [ALICE, BOB, CHARLIE]
Reduce 示例
import java.util.*;public class ReduceExample {public static void main(String[] args) {List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);// 计算乘积int product = numbers.stream().reduce(1, (a, b) -> a * b);System.out.println("乘积: " + product);}
}

输出

乘积: 120

相关文章:

Lambda 表达式

一、Lambda 表达式简介 Lambda 表达式是一种简洁的函数式编程方式&#xff0c;用于实现只有一个方法的接口&#xff08;例如函数式接口&#xff09;。 基本语法 (parameters) -> expression (parameters) -> { statements; } 参数&#xff1a;可以有零个或多个参数。…...

TCN时间卷积神经网络多变量多步光伏功率预测(Matlab)

代码下载&#xff1a;TCN时间卷积神经网络多变量多步光伏功率预测&#xff08;Matlab&#xff09; TCN时间卷积神经网络多变量多步光伏功率预测 一、引言 1.1、研究背景和意义 随着全球能源危机的加剧和环保意识的提升&#xff0c;可再生能源&#xff0c;尤其是太阳能&…...

【Elasticsearch】 Composite Aggregation 详解

1.什么是 Composite Aggregation&#xff1f; Composite Aggregation 是 Elasticsearch 中的一种特殊聚合方式&#xff0c;适用于需要分页展示的聚合结果。它与传统的聚合方式不同&#xff0c;采用了基于游标的分页模型。这种聚合方式可以高效地处理多级聚合中的所有桶&#x…...

如何通过 Logstash 将数据采集到 Elasticsearch

作者&#xff1a;来自 Elastic Andre Luiz 将 Logstash 与 Elasticsearch 集成以实现高效的数据提取、索引和搜索的分步指南。 什么是 Logstash&#xff1f; Logstash 是一种广泛使用的 Elastic Stack 工具&#xff0c;用于实时处理大量日志数据。它充当高效的数据管道&#x…...

mysql的cpu使用率100%问题排查

背景 线上mysql服务器经常性出现cpu使用率100%的告警&#xff0c; 因此整理一下排查该问题的常规流程。 1. 确认CPU占用来源 检查系统进程 使用 top 或 htop 命令&#xff0c;确认是否是 mysqld 进程导致CPU满载&#xff1a;top -c -p $(pgrep mysqld)2. 实时分析MySQL活动 …...

centos虚拟机迁移没有ip的问题

故事背景&#xff0c;我们的centos虚拟机本来是好好的&#xff0c;但是拷贝到其他电脑上就不能分配ip&#xff0c;我个人觉得这个vmware他们软件应该搞定这个啊&#xff0c;因为这个问题是每次都会出现的。 网络选桥接 网络启动失败 service network restart Restarting netw…...

接入 deepseek 实现AI智能问诊

1. 准备工作 注册 DeepSeek 账号 前往 DeepSeek 官网 注册账号并获取 API Key。 创建 UniApp 项目 使用 HBuilderX 创建一个新的 UniApp 项目&#xff08;选择 Vue3 或 Vue2 模板&#xff09;。 安装依赖 如果需要在 UniApp 中使用 HTTP 请求&#xff0c;推荐使用 uni.requ…...

用AVFrame + AVPacket 完成accede编码和直接用ffmpeg命令行实现acc编码的对比

在使用 FFmpeg 进行 AAC 音频编码时,可以选择两种方式:通过编程接口(如 AVFrame 和 AVPacket)实现 AAC 编码,或者直接使用 FFmpeg 命令行工具。这两种方式各有特点,适用于不同的场景。以下是对两种方法的详细分析,包括它们的区别、优缺点以及适用场景。 一、通过 AVFram…...

计算机网络笔记再战——理解几个经典的协议6——TCP与UDP

目录 先说端口号 TCP 使用序号保证顺序性和应答来保证有效性 超时重传机制 TCP窗口机制 UDP 路由协议 协议分类&#xff1a;IGP和EGP 几个经典的路由算法 RIP OSPF 链路状态数据库&#xff08;LSDB&#xff09; LSA&#xff08;Link State Advertisement&#xff0…...

【AI】在Ubuntu中使用docker对DeepSeek的部署与使用

这篇文章前言是我基于部署好的deepseek-r1:8b模型跑出来的 关于部署DeepSeek的前言与介绍 在当今快速发展的技术环境中&#xff0c;有效地利用机器学习工具来解决问题变得越来越重要。今天&#xff0c;我将引入一个名为DeepSeek 的工具&#xff0c;它作为一种强大的搜索引擎&a…...

openssl使用

openssl使用 提取密钥对 数字证书pfx包含公钥和私钥&#xff0c;而cer证书只包含公钥。提取需输入证书保护密码 openssl pkcs12 -in xxx.pfx -nocerts -nodes -out pare.key提取私钥 openssl rsa -in pare.key -out pri.key提取公钥 openssl rsa -in pare.key -pubout -ou…...

《语义捕捉全解析:从“我爱自然语言处理”到嵌入向量的全过程》

首先讲在前面&#xff0c;介绍一些背景 RAG&#xff08;Retrieval-Augmented Generation&#xff0c;检索增强生成&#xff09; 是一种结合了信息检索与语言生成模型的技术&#xff0c;通过从外部知识库中检索相关信息&#xff0c;并将其作为提示输入给大型语言模型&#xff…...

HIVE如何注册UDF函数

如果注册UDF函数的时候报了上面的错误&#xff0c;说明hdfs上传的路径不正确&#xff0c; 一定要用下面的命令 hadoop fs -put /tmp/hive/111.jar /user/hive/warehouse 一定要上传到上面路径&#xff0c;这样在创建函数时&#xff0c;引用下面的地址就可以创建成功...

VsCode创建VUE项目

1. 首先安装Node.js和npm 通过网盘分享的文件&#xff1a;vsCode和Node&#xff08;本人电脑Win11安装&#xff09; 链接: https://pan.baidu.com/s/151gBWTFZh9qIDS9XWMJVUA 提取码: 1234 它们是运行和构建Vue.js应用程序所必需的。 1.1 Node安装&#xff0c;点击下一步即可 …...

x64、aarch64、arm与RISC-V64:详解四种处理器架构

x64、aarch64、arm与RISC-V64:详解四种处理器架构 x64架构aarch64架构ARM架构RISC-V64架构总结与展望在计算机科学领域,处理器架构是构建计算机系统的基石,它决定了计算机如何执行指令、管理内存和处理数据。x64、aarch64、arm与RISC-V64是当前主流的四种处理器架构,它们在…...

如何使用iframe来渲染ThingsBoard仪表盘

1、概述 当我们在使用ThingsBoard的时候,有时候需要再自己的前端项目中展示大屏,thingsboard的仪表盘是可以来做大屏的,虽然界面达不到非常的美观,但是对比之前的版本,现在的版本仪表盘做了很多的优化了。可以实现将thingsboard的仪表板嵌入到自己的vue界面中作为大屏显示…...

退格法记单词(类似甘特图)

退格法记单词&#xff0c;根据记忆次数或熟练程度退格&#xff0c;以示区分&#xff0c;该方法用于短时高频大量记单词&#xff1a; explosion爆炸&#xff0c;激增 mosquito蚊子granary粮仓&#xff0c;谷仓 offhand漫不经心的 transient短暂的slob懒惰而邋遢的…...

计算 MySQL 表行的成本是多少?

当计算表中的所有行时&#xff0c;将使用什么索引&#xff1f;好吧&#xff0c;MySQL文档文档对此提供了一个直接的答案&#xff0c;引用&#xff1a; InnoDB 通过遍历最小的可用二级索引来处理 SELECT COUNT&#xff08;*&#xff09; 语句除非索引或优化器提示指示优化器使用…...

Pygame介绍与游戏开发

提供pygame功能介绍的文档&#xff1a;Pygame Front Page — pygame v2.6.0 documentation 基础语法和实现逻辑 与CLI不同&#xff0c;pygame提供了图形化使用界面GUI&#xff08;graphical user interface&#xff09;基于图像的界面可以创建一个有图像和颜色的窗口 要让py…...

webpack配置方式

1. 基本配置文件 (webpack.config.js)&#xff08;导出一个对象&#xff09; 最常见的方式是通过 webpack.config.js 文件来配置 Webpack&#xff0c;导出一个对象。你可以在这个文件中导出一个配置对象&#xff0c;指定入口、输出、加载器、插件等。 // webpack.config.js m…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06&#xff08;十亿美元&#xff09;。漏洞扫描服务市场行业预计将从 2024 年的 3.48&#xff08;十亿美元&#xff09;增长到 2032 年的 9.54&#xff08;十亿美元&#xff09;。预测期内漏洞扫描服务市场 CAGR&#xff08;增长率&…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...