Stream API 和 Lambda表达式

Java 8 Stream API

内容
  1. 操作类型
    • 中间操作:对流中的元素进行操作,如过滤(filter)、映射(map)、排序(sorted)、查找(findFirst)等。
    • 终端操作:结束流操作,并产生结果,如收集(collect)、计数(count)、遍历(forEach)等。
  2. 流来源
    • 从集合、数组、I/O资源等创建流。
  3. 并行处理
    • 支持并行处理,可以高效地处理大数据集。
使用方法
  1. 创建流
    • 从集合创建流:List<String> list = Arrays.asList("a", "b", "c"); Stream<String> stream = list.stream();
    • 从数组创建流:int[] numbers = {1, 2, 3}; Stream<Integer> stream = Arrays.stream(numbers);
  2. 中间操作
    • 链式调用,如:stream.filter(s -> s.startsWith("a")).map(String::toUpperCase).forEach(System.out::println);
  3. 终端操作
    • 结束流操作,如:List<String> result = stream.collect(Collectors.toList());

Lambda 表达式

内容
  1. 匿名函数:没有名称的函数,可以传递给方法。
  2. 单一方法接口:通常用于实现了单一抽象方法的接口。
使用方法
  1. 创建
    • 定义方法接口的匿名实现,如:Runnable runnable = () -> System.out.println("Hello, World!");
    • 定义带参数的Lambda表达式,如:Comparator<String> comparator = (s1, s2) -> s1.compareTo(s2);
  2. 简化代码
    • 代替匿名内部类,如:list.sort(comparator);(使用Lambda表达式)
    • 而不是list.sort(new Comparator<String>() { ... });(使用匿名内部类)

示例

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class StreamExample {public static void main(String[] args) {List<String> names = Arrays.asList("Alice", "Bob", "Charlie");// 使用Stream API和Lambda表达式List<String> upperCaseNames = names.stream().filter(name -> name.startsWith("A")).map(String::toUpperCase).collect(Collectors.toList());upperCaseNames.forEach(System.out::println);}
}

在这个示例中,使用Stream API和Lambda表达式来处理一个字符串列表,筛选出以"A"开头并转换为大写的字符串,并将结果收集到一个新的列表中。

总结来说,Java 8 Stream API提供了一种新的数据处理方式,而Lambda表达式提供了一种新的代码表达方式。两者结合使用,可以写出更简洁、高效的代码。

中间操作和终端操作

在Java 8的Stream API中,中间操作和终端操作是两个关键概念,它们定义了流处理的不同阶段。

中间操作(Intermediate Operations)

中间操作是流处理的第一阶段。当你对流执行中间操作时,它不会立即执行这些操作,而是会返回一个新的流。这个新的流包含了原始流的所有元素,但会附带额外的信息,用于执行后续操作。

特点:
  1. 惰性执行:中间操作是惰性的,意味着它们不会立即执行,而是会生成一个新的流。
  2. 链式调用:你可以将多个中间操作链式调用,形成一个复杂的数据处理流程。
  3. 返回新的流:每个中间操作都会返回一个新的流。
示例:
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
names.stream().filter(name -> name.startsWith("A")).map(String::toUpperCase).forEach(System.out::println);

在这个例子中,filtermap都是中间操作。它们不会立即执行,而是生成一个新的流,这个流包含了所有以"A"开头并转换为大写的字符串。

终端操作(Terminal Operations)

终端操作是流处理的最终阶段。当你对流执行终端操作时,它会对流中的元素执行最终的计算,并产生一个结果。这个结果可以是任何类型的,比如一个列表、一个计数或者一个计算出的值。

特点:
  1. 执行并返回结果:终端操作会执行流处理流程,并返回一个结果。
  2. 结束流处理:一旦终端操作被执行,流处理流程就结束了。
示例:
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
int count = names.stream().filter(name -> name.startsWith("A")).mapToInt(String::length).sum();
System.out.println("Number of letters: " + count);

在这个例子中,sum()是一个终端操作。它对流中的每个元素(这里是字符串的长度)执行求和操作,并返回结果。

总结

  • 中间操作:对流进行处理但不立即执行,返回一个新的流。
  • 终端操作:对流进行最终的处理并返回结果,结束流处理流程。

理解这两个概念对于正确使用Java 8 Stream API非常重要,因为它们定义了流处理的流程和顺序。

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

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

相关文章

Python设计模式之适配器模式

目录 一、适配器模式 适配器模式的组成部分 适配器模式的种类 应用场景 实现步骤 二、测试例子 一、适配器模式 适配器模式&#xff08;Adapter Pattern&#xff09;是一种结构型设计模式&#xff0c;它通过将一个现有接口转换为另一个期望的接口来让不兼容的接口能够合作…

生产物流智能优化系统

对生产调度、物流调度【车辆路径问题、配送中心拣选问题】智能优化算法研究形成系统性程序&#xff0c;逐步开发设计一个智能优化系统【包括&#xff1a;问题说明、实验界面、算法结构和算法程序应用说明】&#xff0c; 当前完成TSP和集送车辆路径的算法程序&#xff0c;程序效…

华为芯片与系统详细梳理--Kirin麒麟 Ascend昇腾 Kunpeng鲲鹏 HarmonyOS鸿蒙 Euler欧拉

华为芯片与系统详细梳理--Kirin麒麟 & Ascend昇腾 & Kunpeng鲲鹏 & HarmonyOS鸿蒙 & Euler欧拉 1 概述2 芯片2.1 整体描述麒麟芯片&#xff08;To C&#xff09;【面向智能终端】昇腾芯片【面向AI计算】鲲鹏芯片【面向通用计算】 2.2 细分系列麒麟芯片&#xf…

C#【进阶】迭代器

迭代器 文章目录 1、迭代器概念2、标准迭代器的实现方法3、用yield return 语法糖实现迭代器4、用yield return 语法糖为泛型类实现迭代器 1、迭代器概念 迭代器&#xff08;iterator&#xff09; 又称光标&#xff08;cursor&#xff09; 是程序设计的软件设计模式 迭代器提供…

【网络技术】【Kali Linux】Wireshark嗅探(十二)NBNS协议报文捕获及分析

往期 Kali Linux 上的 Wireshark 嗅探实验见博客&#xff1a; 【网络技术】【Kali Linux】Wireshark嗅探&#xff08;一&#xff09;ping 和 ICMP 【网络技术】【Kali Linux】Wireshark嗅探&#xff08;二&#xff09;TCP 协议 【网络技术】【Kali Linux】Wireshark嗅探&…

linux添加hdmi、dp自定义分辨率

https://cn.linux-console.net/?p1452 未测试 $ xrandr Screen 0: minimum 16 x 16, current 2560 x 1440, maximum 32767 x 32767 XWAYLAND0 connected primary 2560x144000 (normal left inverted right x axis y axis) 600mm x 330mm2560x1440 59.96*1920x1440 59…

加入MongoDB AI创新者计划,携手MongoDB共同开创AI新纪元

加入MongoDB AI创新者计划&#xff01; MongoDB对AI创新和初创企业的支持既全面又广泛&#xff01;无论您是领先的AI初创企业还是刚刚起步&#xff0c;MongoDB Atlas都是支持您愿景的最佳平台。 AI 初创者计划The AI Startup Track AI初创者计划为早期初创企业提供专属福利&…

java单元测试:集成测试

单元测试和集成测试是软件测试中两个重要的阶段&#xff0c;它们在测试过程中扮演不同的角色&#xff0c;但目标都是确保软件的质量和稳定性。以下是对单元测试和集成测试的详细介绍。 1. 单元测试&#xff08;Unit Testing&#xff09; 1.1 定义 单元测试是对软件中的最小可…

hcia datacom学习(10):交换机基础

1.二层交换机工作原理 1.1交换机的5种行为 查看mac地址表的命令为 dis mac-address *一个MAC只能关联在一个接口上&#xff0c;一个接口上可以学习多个MAC *mac地址漂移&#xff1a;mac表中&#xff0c;mac地址的出接口从一个端口变为另一个端口的现象。 造成mac漂移的原因…

【C++提高编程-03】----C++之STL常用容器基础实战

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

移动云——让每个人都能享受云技术的魅力

一、引言 云技术的起源可以追溯到20世纪60年代和70年代&#xff0c;随着科技的发展&#xff0c;现在早就和所有人息息相关。在云技术的浪潮中&#xff0c;有这么一家厂商通过自己的努力&#xff0c;深耕云计算市场&#xff0c;不仅有各种各样的产品为开发者提供服务&#xff0…

git push后一直卡在在Writing objects:问题

git push后一直卡在Writing objects: 解决&#xff1a;设置 git config --global http.postBuffer 5242880000在执行git push。 一般设置后就可以成功了&#xff0c;后面不用看。 2. 我这里结果又报错&#xff1a; fatal: protocol error: bad line length 8192 MiB | 107.46 …

人工智能应用-实验8-用生成对抗网络生成数字图像

文章目录 &#x1f9e1;&#x1f9e1;实验内容&#x1f9e1;&#x1f9e1;&#x1f9e1;&#x1f9e1;代码&#x1f9e1;&#x1f9e1;&#x1f9e1;&#x1f9e1;分析结果&#x1f9e1;&#x1f9e1;&#x1f9e1;&#x1f9e1;实验总结&#x1f9e1;&#x1f9e1; &#x1f9…

嵌入式实时操作系统笔记2:UCOS基础知识_UC/OS-III移植(STM32F4)_编写简单的UC/OS-III任务例程(失败.....)

今日学习嵌入式实时操作系统RTOS&#xff1a;UC/OS-III实时操作系统 本文只是个人学习笔记备忘用&#xff0c;附图、描述等 部分都是对网上资料的整合...... 文章主要研究如何将UC/OS-III 移植到 STM32 F407VET6上&#xff0c;提供测试工程下载 &#xff08;2024.5.21 文章未…

Java web应用性能分析之【高并发之缓存-多级缓存】

说到缓存&#xff0c;作为java开发第一时间想到的是不是上图所示的Redis&#xff0c;又或者是Guava Cache、Caffeine、EhCache这些&#xff1b;Redis作为分布式缓存、其他的可以作为本地缓存。但是作为一名资深开发人员&#xff0c;着眼的层面应该再提升一个级别&#xff0c;从…

Prometheus监控平台配置--监控mysql

上一篇中讲述了怎么安装Prometheus&#xff0c;然后对服务器集群资源信息进行监控并通过grafana展示监控信息&#xff0c;在这一篇中我们只讲和mysql相关的监控&#xff0c;关于prometheus的监控原理以及安装可以看下上一篇。 1.上传 通过rz命令将安装包上传到任意目录&#xf…

翻译AnyDoor: Zero-shot Object-level Image Customization

摘要 本研究介绍了AnyDoor&#xff0c;这是一款基于扩散模型的图像生成器&#xff0c;能够在用户指定的位置&#xff0c;以期望的形状将目标对象传送到新场景中。与为每个对象调整参数不同&#xff0c;我们的模型仅需训练一次&#xff0c;就能在推理阶段轻松地泛化到多样化的对…

SpringBoot——整合Redis

目录 Redis 创建Commodity表 启动MySQL和Redis 新建一个SpringBoot项目 pom.xml application.properties Commodity实体类 ComMapper接口 ComService业务层接口 ComServiceImpl业务接口的实现类 ComController控制器 RedisConfig配置类 SpringbootRdisApplication启…

在Visual Studio Code和Visual Studio 2022下配置Clang-Format,格式化成Google C++ Style

项目开发要求好的编写代码格式规范&#xff0c;常用的是根据Google C Style Guide 网上查了很多博文&#xff0c;都不太一样有的也跑不起来&#xff0c;通过尝试之后&#xff0c;自己可算折腾好了&#xff0c;整理一下过程 背景&#xff1a; 编译器主要有三部分&#xff1a;前…

Baidu地图SDK接入后的点击事件实现。

在很多APP中&#xff0c;我们接入了百度地图&#xff0c;而这个百度地图只是拥有提示、展示的作用&#xff0c;并不希望它具有操作功能。 比如&#xff0c;在外卖APP中&#xff0c;粗略地展示一下地理位置&#xff0c;点击地图后&#xff0c;直接跳转对应的导航。 于是这样写…