Java Stream实战_函数式编程的新方式

server/2025/2/6 2:14:27/

1. 引言

Stream_2">1.1 Java Stream简介

  • Stream是什么Stream是Java 8引入的一个接口,用于处理集合数据。
  • 与传统集合的区别Stream不存储数据,而是通过管道操作(如过滤、映射)来处理数据。
  • 主要特点:惰性求值、链式调用、函数式编程风格。

1.2 函数式编程基础

  • 什么是函数式编程:一种编程范式,强调使用纯函数和不可变数据。
  • Java中的函数式接口:如Function, Predicate, Consumer等。
  • Lambda表达式:简化匿名内部类的语法糖。
Stream_API_12">1.3 Stream API的历史背景和发展
  • Java 8之前的集合处理方式:迭代器、增强for循环。
  • Stream API的引入动机:提高代码可读性和性能。
  • 后续版本的改进:如Java 9的流式文件处理、Java 10的局部变量类型推断等。

Stream__17">2. Stream 基础

Stream_19">2.1 创建Stream

  • 从集合创建List.stream(), Set.stream()等。

    java">List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
    Stream<String> stream = names.stream();
    
  • 从数组创建Arrays.stream(array)

    java">String[] namesArray = {"Alice", "Bob", "Charlie"};
    Stream<String> streamFromArray = Arrays.stream(namesArray);
    
  • 使用静态方法创建Stream.of(), Stream.generate(), Stream.iterate()

    java">Stream<String> streamOf = Stream.of("Alice", "Bob", "Charlie");
    Stream<Integer> infiniteStream = Stream.iterate(0, n -> n + 1);
    

Stream_39">2.2 Stream操作类型

  • 中间操作:如filter, map, flatMap等,返回一个新的Stream

    java">List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
    Stream<String> filteredStream = names.stream().filter(name -> name.startsWith("A"));
    
  • 终止操作:如forEach, collect, reduce等,执行计算并返回结果。

    java">List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
    long count = names.stream().filter(name -> name.startsWith("A")).count();
    

Stream_53">3. 常用Stream操作

3.1 筛选与切片

  • filter:根据条件筛选元素。

    java">List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
    List<String> filteredNames = names.stream().filter(name -> name.startsWith("A")).collect(Collectors.toList());
    
  • limit:限制返回的元素数量。

    java">List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
    List<String> limitedNames = names.stream().limit(2).collect(Collectors.toList());
    
  • skip:跳过指定数量的元素。

    java">List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
    List<String> skippedNames = names.stream().skip(1).collect(Collectors.toList());
    

3.2 映射

  • map:将每个元素转换为另一个形式。

    java">List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
    List<Integer> nameLengths = names.stream().map(String::length).collect(Collectors.toList());
    
  • flatMap:将多个Stream合并为一个Stream

    java">List<List<String>> listOfLists = Arrays.asList(Arrays.<

http://www.ppmy.cn/server/165301.html

相关文章

从零开始实现一个双向循环链表:C语言实战

文章目录 1链表的再次介绍2为什么选择双向循环链表&#xff1f;3代码实现&#xff1a;从初始化到销毁1. 定义链表节点2. 初始化链表3. 插入和删除节点4. 链表的其他操作5. 打印链表和判断链表是否为空6. 销毁链表 4测试代码5链表种类介绍6链表与顺序表的区别7存储金字塔L0: 寄存…

Nginx的路径匹配规则 笔记250203

Nginx的路径匹配规则 Nginx 的路径匹配规则主要通过 location 指令实现&#xff0c;用于根据请求的 URI&#xff08;路径&#xff09;将请求路由到不同的处理逻辑。其匹配规则灵活且功能强大&#xff0c;但也需要谨慎配置以避免冲突。以下是 Nginx 路径匹配规则的详细解析&…

[权限提升] Windows 提权 维持 — 系统错误配置提权 - Trusted Service Paths 提权

关注这个专栏的其他相关笔记&#xff1a;[内网安全] 内网渗透 - 学习手册-CSDN博客 0x01&#xff1a;Trusted Service Paths 提权原理 Windows 的服务通常都是以 System 权限运行的&#xff0c;所以系统在解析服务的可执行文件路径中的空格的时候也会以 System 权限进行解析&a…

CSS关系选择器详解

CSS关系选择器详解 学习前提什么是关系选择器&#xff1f;后代选择器&#xff08;Descendant Combinator&#xff09;语法示例注意事项 子代选择器&#xff08;Child Combinator&#xff09;语法示例注意事项 邻接兄弟选择器&#xff08;Adjacent Sibling Combinator&#xff0…

吴恩达深度学习——卷积神经网络基础

本文来自https://www.bilibili.com/video/BV1FT4y1E74V&#xff0c;仅为本人学习所用。 文章目录 矩阵和张量边缘检测计算方式检测原理 Valid卷积和Same卷积卷积步长三维卷积单层卷积网络总结符号定义输入输出维度其他参数维度 举例 池化层示例输入层第一层卷积 - 池化第二层卷…

【Rust自学】19.1. 摆脱安全性限制的unsafe Rust

喜欢的话别忘了点赞、收藏加关注哦&#xff08;加关注即可阅读全文&#xff09;&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 19.1.1. 匹配命名变量 到目前为止我们讨论的所有代码都在编译时强制执行Rust的内存安全保证…

Appium介绍

在使用不同版本的Appium包进行自动化测试时&#xff0c;出现警告问题可能是由于版本不兼容、配置不正确等原因导致的。下面将详细介绍解决这些问题的步骤&#xff0c;确保模拟器能够正常启动&#xff0c;并能在Appium查看器中同步显示。 1. 环境准备 首先&#xff0c;确保你已…

Kali linux 下载与快捷安装

前言 关于Kali linux的下载安装&#xff0c;很多文章都是自己创建虚拟机去安装&#xff0c;但这样太过繁琐&#xff0c;本文采用导入虚拟机的方式来实现快捷安装&#xff0c;步骤少、时间短&#xff0c;以减少在环境配置上的时间与精力消耗。 正文 下载镜像 首先我们下载镜…