关于Stream流和Lambda表达式,这些技巧你都知道吗?

news2024/11/29 8:51:19

在这里插入图片描述

                                                          💧 关于 S t r e a m 流和 L a m b d a 表达式,这些技巧你都知道吗? \color{#FF1493}{关于Stream流和Lambda表达式,这些技巧你都知道吗?} 关于Stream流和Lambda表达式,这些技巧你都知道吗?💧          


🌷 仰望天空,妳我亦是行人.✨
🦄 个人主页——微风撞见云的博客🎐
🐳 《数据结构与算法》专栏的文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺
💧 《Java学习笔记》专栏的文章是本人在Java学习中总结的一些知识点~ 💐
🥣 《每天一点小知识》专栏的文章可以丰富你的知识库,滴水成河~ 🌊
🪁 希望本文能够给读者带来一定的帮助~🌸文章粗浅,敬请批评指正!🐥


文章目录

  • 🐳关于Stream流和Lambda表达式,这些技巧你都知道吗?
    • 🌊引言
    • 🌊Stream流简介
    • 🌊Lambda表达式简介
    • 🌊Stream流和Lambda表达式的实例应用
      • 示例一:求和
      • 示例二:筛选
      • 示例三:计算平均值
    • 🌊结论
  • 🐳结语


🐳关于Stream流和Lambda表达式,这些技巧你都知道吗?

🌊引言

在Java 8中引入的Stream流和Lambda表达式为我们处理集合和数据流提供了更加简洁、灵活的方式。通过使用Stream流和Lambda表达式,我们可以以一种函数式的风格对数据进行处理,从而使代码更具可读性和可维护性。本文将介绍Stream流和Lambda表达式的基本概念,并通过具体的示例来展示它们的强大之处。


🌊Stream流简介

  💧Stream流是Java 8中引入的一种处理集合和数据流的机制。它可以将集合或数组等数据源转换为一种连续的数据流,通过一系列的中间操作和终端操作来处理数据。Stream流的特点包括:

  • 流式操作:可以对流中的元素进行一系列的操作,如过滤、映射、排序等,而无需使用显式的循环操作。
  • 惰性求值:Stream流使用延迟执行的方式,只有在需要结果时才会进行计算,这样可以提高效率。
  • 可并行处理:Stream流支持并行处理,可以充分利用多核处理器的优势,提高程序的性能。

🌊Lambda表达式简介

  💧Lambda表达式是一种简洁、灵活的函数式编程的方式,它可以用来创建函数式接口的实例。Lambda表达式的语法如下:

(parameter) -> { body }

  💧其中,parameter表示参数列表,可以为空或包含一个或多个参数;body表示方法体,可以是一个表达式或代码块。

  💧Lambda表达式的优势包括:

  • 简洁性:Lambda表达式可以减少冗余的代码,使得代码更加简洁、易读。
  • 函数式风格:Lambda表达式支持函数式编程的风格,可以将数据处理操作抽象为函数,从而实现更高级别的抽象和组合。
  • 延迟执行:Lambda表达式可以延迟执行,只有在需要时才会执行,这样可以提高效率。

🌊Stream流和Lambda表达式的实例应用

下面通过具体的示例来展示Stream流和Lambda表达式在数据处理中的应用 ↓

示例一:求和

  💧假设我们有一个整数列表,我们想要计算列表中所有元素的和。我们可以使用传统的方式进行循环遍历和累加,代码如下:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = 0;
for (int number : numbers) {
    sum += number;
}
System.out.println("Sum: " + sum);

  💧使用Stream流和Lambda表达式,我们可以通过一行代码实现相同的功能:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream().reduce(0, (a, b) -> a + b);
System.out.println("Sum: " + sum);

  💧在上面的代码中,我们首先将整数列表转换为Stream流,然后使用reduce()方法来将所有元素累加起来。reduce()方法接受一个初始值(0)和一个Lambda表达式作为参数,该Lambda表达式用于定义累加的规则。

示例二:筛选

  💧假设我们有一个字符串列表,我们想要找出其中所有以字母"a"开头的字符串。我们可以使用传统的方式进行循环遍历和筛选,代码如下:

List<String> words = Arrays.asList("apple", "banana", "orange", "avocado", "grape");
List<String> filteredWords = new ArrayList<>();
for (String word : words) {
    if (word.startsWith("a")) {
        filteredWords.add(word);
    }
}
System.out.println("Filtered words: " + filteredWords);

  💧使用Stream流和Lambda表达式,我们可以通过一行代码实现相同的功能:

List<String> words = Arrays.asList("apple", "banana", "orange", "avocado", "grape");
List<String> filteredWords = words.stream()
                                  .filter(word -> word.startsWith("a"))
                                  .collect(Collectors.toList());
System.out.println("Filtered words: " + filteredWords);

  💧在上面的代码中,我们首先将字符串列表转换为Stream流,然后使用filter()方法对流中的元素进行筛选,只保留以字母"a"开头的字符串。最后,我们使用collect()方法将筛选后的结果收集到一个新的列表中。

示例三:计算平均值

  💧假设我们有一个包含员工工资的列表,我们想要计算所有员工的平均工资。我们可以使用传统的方式进行循环遍历和累加,代码如下:

List<Double> salaries = Arrays.asList(2500.0, 3000.0, 2000.0, 3500.0, 2800.0);
double sum = 0;
for (double salary : salaries) {
    sum += salary;
}
double average = sum / salaries.size();
System.out.println("Average salary: " + average);

  💧使用Stream流和Lambda表达式,我们可以通过一行代码实现相同的功能:

List<Double> salaries = Arrays.asList(2500.0, 3000.0, 2000.0, 3500.0, 2800.0);
double average = salaries.stream()
                         .mapToDouble(Double::doubleValue)
                         .average()
                         .orElse(0.0);
System.out.println("Average salary: " + average);

  💧在上面的代码中,我们首先将工资列表转换为Stream流,然后使用mapToDouble()方法将工资转换为double类型的流。接下来,我们使用average()方法计算流中元素的平均值。最后,我们使用orElse()方法来处理可能的空结果,如果流为空,则返回默认值0.0。


🌊结论

  通过上述示例,我们可以看到Stream流和Lambda表达式的强大之处。它们可以使我们的代码更加简洁、易读,并提供了丰富的操作和组合方式来处理集合和数据流。在实际开发中,我们可以根据具体的需求和场景选择合适的操作方法和终端操作来实现我们的功能。

  在使用Stream流和Lambda表达式时,我们应该注意代码的可读性和可维护性。尽量使用简洁明了的命名和清晰的逻辑结构,避免过度使用复杂的操作链,以免影响代码的可读性和维护性。掌握Stream流和Lambda表达式是成为Java高级开发人员的关键技能之一。通过灵活运用它们,我们可以以更加简洁、优雅的方式处理数据,提高代码的质量和开发效率。


在这里插入图片描述


🐳结语

🐬初学一门技术时,总有些许的疑惑,别怕,它们是我们学习路上的点点繁星,帮助我们不断成长。

🐟积少成多,滴水成河。希望本文对你理解和应用Stream流和Lambda表达式有所帮助!!

💧参考资料:

  • Java 8 Stream API Tutorial
  • Java 8 Lambda Expressions Tutorial

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/664035.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2014年全国硕士研究生入学统一考试管理类专业学位联考写作试题

2014年1月真题: 四、写作:第56~57小题&#xff0c;共65分。其中论证有效性分析30 分&#xff0c;论说文35分。 56.论证有效性分析: 分析下述论证中存在的缺陷和漏洞&#xff0c;选择若干要点&#xff0c;写一篇600字左右的文章&#xff0c;对该论证的有效性进行分析和评论。…

马克思第二章

1.实践和认识 实践决定认识&#xff0c;认识又反作用于实践 实践的特点&#xff1a; 1.直接现实性 2.自觉能动性 3.社会历史性 实践和认识的关系 1.实践是认识的来源 2.实践是认识的目的 3.实践是认识的发展动力 4.实践是检验认识真理的唯一标准 5.认识又反作用于实践&#xf…

gocv Windows10下编译和安装(opencv4.7)

opencv居然还没有官方的golang版&#xff0c;出乎意料。为了编译安装这玩意&#xff0c;折腾了一下午&#xff0c;记录下&#xff1a; 资源提前下载 1、 MinGW-w64 这里的坑是对于只懂一点点的人&#xff0c;容易选错版本&#xff1a; 没仔细看的人很可能会选win32的&#x…

【EDA软件互转】PADS转Allegro

1. 使用pads软件打开PCB文件&#xff0c;然后执行菜单命令&#xff1a;File->Export->弹出的对话框中点击“保存”。然后按下图设置后点击“OK”按钮&#xff0c;会在当前目录下生成一个前面保存的asc文件&#xff1b;如果点击OK后有弹出其它提示就点击“确定”就好…

在编写测试报告的时候,我们有哪些点需要注意的呢?

测试报告作为测试人员的核心输出项&#xff0c;是体现自己工作价值的重要承载工具&#xff0c;需要我们认真对待&#xff0c;所以我们要重视测试报告的输出&#xff0c;那么在编写测试报告的时候&#xff0c;我们有哪些点需要注意的呢&#xff1f; 1、不要乱用模板 很多测试新…

CTR预估之WideDeep系列(下):NFM/xDeepFM

在上一篇文章中CTR预估之Wide&Deep系列模型:DeepFM/DCN&#xff0c;学习了Wide & Deep这种通用框架&#xff1a;wide组件的线性模型的显性低阶特征交叉提供记忆能力&#xff0c;deep组件的深度网络模型的隐式高阶特征交叉提供泛化能力&#xff0c;还有DeepFM和Deep&…

蓝桥杯刷题篇①

前言&#xff1a;hello各位童学们好呀&#xff01;许久不见&#xff01;本文为本人的蓝桥杯OJ的刷题笔记&#xff01;文章隶属于专栏蓝桥杯&#xff0c;该专栏的目的是为了记录自己的刷题记录和学习过程&#xff0c;激励自己不断前行&#xff0c;为明年的ACM、ICPC、蓝桥杯等比…

CVPR2023最佳论文提名(12篇)

CVPR2023公布了12篇最佳论文候选文章。&#xff08;直接点击标题可以查看原文&#xff5e;&#xff09; Ego-Body Pose Estimation via Ego-Head Pose Estimation 单位&#xff1a;Stanford-----------关键词&#xff1a;姿态估计 3D Registration With Maximal Cliques 单位&…

三层交换机与路由互联配置(华为设备)

#三层交换机与路由器配置配置 #三层交换机与路由器配置配置 路由器配置 #进入系统视图 <Huawei>system-view #关闭系统提示信息 [Huawei]undo info-center enable #配置一个环回口 [Huawei]int LoopBack 0 #配置IP地址 与 掩码 [Huawei-LoopBack0]ip address 1.1.…

基于matlab使用自定义辐射方向图进行天线阵列分析(附源码)

一、前言 此示例演示如何使用自定义天线辐射方向图创建天线阵列&#xff0c;然后如何分析阵列的响应方向图。这种模式可以通过测量或模拟获得。 二、导入辐射图 根据应用的不同&#xff0c;实用的相控天线阵列有时会使用专门设计的天线元件&#xff0c;其辐射方向图无法用闭式方…

Java018——Java方法

什么是方法&#xff1f; 方法的作用&#xff1f; 方法的定义 方法的使用 一、什么是方法&#xff1f; Java方法是语句的集合 二、方法的作用&#xff1f; 它们&#xff08;语句&#xff09;在一起执行一个功能。 三、方法的定义 格式&#xff1a; 修饰符 返回值类型 方法名…

PostgreSQL(九)内置系统视图

目录 一、系统视图二、 pg_stat_activity 视图1.简介2.核心字段3.全部字段 一、系统视图 PGSQL 中提供了一系列内置的视图&#xff0c;包括系统视图和其他视图。 系统视图提供了查询系统表的一些便利的访问方法。其他视图提供了访问内部服务器状态的方法。 官方文档&#xf…

Spring Boot是什么?详解它的优缺点以及四大核心

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 作者会持续更新网络知识和python基础知识&#xff0c;期待你的关注 目录 一、Spring Boot 是什么&#xff1f; 二、Spring Boot 的优缺点 1、优点 ①可快速构建独立的 Spring 应用 ②直接嵌入Tomcat、Jett…

【Python GUI编程系列 01】安装python pycharm 和 pyside6

Python GUI编程系列 01 安装python pycharm 和 pyside61、安装python2、安装pycharm3、安装 pyside6 安装python pycharm 和 pyside6 本系列使用python3 pycharmpyside6 来进行python gui设计&#xff0c;首先我们来配置编程环境 PS&#xff1a;为了减少复杂程度&#xff0c;本…

学习HCIP的day.15

目录 三层架构 一、网络拓扑冗余 1、线路冗余 2、设备冗余 3、网关冗余 4、电源冗余 二、三和一&#xff08;网关、根网桥、SVI&#xff09; 三、管理vlan 四、三层交换机 五、网关冗余 六、名词注解&#xff1a; 七、数据交换方法&#xff1a; 1、原始交…

STM32开发——ADC(烟雾传感器)

目录 1.ADC简介 2.项目简介 3.CubeMX设置 4.函数代码 1.ADC简介 作用&#xff1a;用于读取电压值&#xff0c;然后转换为数字量传给单片机&#xff0c;单片机再通过计算&#xff0c;可以得到电压值。 ADC的性能指标 量程&#xff1a;能测量的电压范围分辨率&#xff1a;A…

简聊关于Flutter的争议~

关于Flutter的争议 Flutter是谷歌的推出的跨平台UI框架&#xff0c;可以快速在iOS和Android上构建高质量的原生用户界面&#xff0c;可以与现有的代码一起工作。在全世界&#xff0c;Flutter正在被越来越多的开发者和组织使用&#xff0c;并且Flutter是完全免费、开源的。这是…

机器学习课程报告——基于机器学习的自动人脸识别研究

摘 要 生物特征识别技术使用了人体本身所固有的生物特征&#xff0c;与传统的身份识别方法完全不同&#xff0c;具有更高的安全性、可靠性、和有效性&#xff0c;越来越受到人们的重视。人脸识别技术作为生物特征识别技术的重要组成部分&#xff0c;在近三十年里得到了广泛的关…

论文阅读:Dense Depth Priors for Neural Radiance Fields from Sparse Input Views

CVPR2022 Preliminary 首先我们由一组室内的RGB图像 { I i } i 0 N − 1 , I i ∈ [ 0 , 1 ] H W 3 \{I_i\}^{N-1}_{i0}, I_i \in [0,1]^{H \times W \times 3} {Ii​}i0N−1​,Ii​∈[0,1]HW3。通过SFM的方法&#xff0c;我们可以获得相机位姿 p i ∈ R 6 p_i \in \mathb…

QR点歌系统

一、点歌初始化 点歌初始化 A:$获取群列表$ a:0 b:$JSON 长度 A$ :标签 如果:%a%<%b% c:$JSON 获取 A %a%$ $写 点歌系统/音源 %c% Q音$ $写 点歌系统/格式 %c% json$ ‖ %a% ‖ %c% ‖ 初始化成功\n a:[%a%1] $jump :标签$ 如果尾这段代码是点歌系统的初始化过程。它通过…