Java基础:流Stream详解

Java基础:流Stream详解

什么是流Stream?

Java中的流(Stream)是指代表数据流通的对象。Stream与java.io包中的流不同,Stream没有io操作,是一种抽象的数据结构,是一种更高级、更便捷、更优雅的处理数据的方式。Stream的目的是通过类似于流水线的方式来处理集合中的元素,通过流的操作,可以将对集合的处理变得更加简单、减少代码量,提高代码可读性。

Stream特点:

  • 不是数据结构:不像集合一样,Stream不是存储数据的数据结构,而是通过管道操作数据源(可以是集合,数组等)的元素序列;
  • 惰性求值:操作并不离开数据源,且一般是延迟执行的,只有在需要的时候才执行;
  • 数据消费一次:Stream在执行过程中只能被消费一次,一旦调用了终止操作,Stream会自动关闭。

Stream的操作

Stream的操作可以分为中间操作和终止操作两种。中间操作是在数据流经过管道后的一个环节,它可以对数据源(集合,数组等)的元素进行处理,处理后再传给下一个环节继续处理。而终止操作则是将处理完的数据流汇集起来并输出结果。Stream的中间操作和终止操作可以任意组合,这样可以构造出各种不同的数据处理流程。

中间操作

  • filter(Predicate predicate):过滤符合条件的元素,返回的是一个新的Stream;
  • map(Function func):将元素类型转换为另外一种类型,返回的是一个新的Stream;
  • flatMap(Function> mapper):将每个元素转换为一个或多个其他元素,并将所有元素合并到一个Stream中返回;
  • distinct():去重操作,返回的是一个新的Stream;
  • sorted():对Stream中的数据进行排序操作,返回的是一个新的Stream;
  • limit(int maxSize):对Stream中前maxSize个元素进行操作,返回的是一个新的Stream;
  • skip(int n):去除前n个元素,返回的是一个新的Stream。

终止操作

  • forEach(Consumer action):消费Stream中的元素,没有返回值;
  • count():返回Stream中的元素个数;
  • collect(Collector collector):将Stream汇集起来并输出结果;
  • reduce(T identity, BinaryOperator accumulator):使用给定的初始值identity和此Stream的元素相继调用二元运算,返回List中的所有元素的总和。

示例1:过滤出长度为5的名字

List<String> names = Arrays.asList("Tom", "Bob", "Mary", "Alice", "John");

names.stream()
    .filter(name -> name.length() == 5)
    .forEach(System.out::println);

输出结果:

Alice

示例2:计算集合中所有元素的和

List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5);

int sum = nums.stream()
              .reduce(0, Integer::sum);

System.out.println(sum);

输出结果:

15

总结

Stream是Java8中非常重要和强大的数据处理工具,通过Stream的管道操作,可以大大简化代码,提高代码的可读性和维护性,尤其是处理基于数据集合的任务时,Stream更是展现了其强大的威力。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java基础:流Stream详解 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • Java实现深度搜索DFS算法详解

    Java实现深度搜索DFS算法详解 DFS简介 深度搜索(Depth First Search, DFS)是一种用于遍历或搜索树或图的算法。其基本思想是从根节点出发,尽可能深的遍历每一个节点,直到没有下一个未访问的节点,然后回溯到最近的未访问节点,并继续访问其它节点。 DFS算法流程 DFS算法的流程如下: 将起始节点添加到栈中 判断栈是否为空,如果为空则退…

    Java 2023年5月19日
    00
  • 理解JPA注解@GeneratedValue的使用方法

    JPA(Java Persistence API)是Java EE中关于对象持久化的标准接口,它将对象映射成数据库中的表,使得Java开发者可以直接使用面向对象的思想来操作数据库。其中@GeneratedValue注解是JPA中常用的注解之一。本文将为你详细介绍@GeneratedValue注解的使用方法及注意点。 什么是@GeneratedValue注解?…

    Java 2023年5月20日
    00
  • hystrix配置中Apollo与Archaius对比分析

    下面是关于“hystrix配置中Apollo与Archaius对比分析”的完整攻略。 1. 什么是Hystrix Hystrix是一个库,用于隔离远程系统,服务或第三方库,防止它们故障并使自己的应用程序保持连续性,并实现弹性、弹性、监控和回退机制。 2. Hystrix中的配置管理 在Hystrix中,除了默认的配置外,大多数配置都可以在运行时进行更改。Hy…

    Java 2023年6月15日
    00
  • Intellij IDEA导入JAVA项目并启动(图文教程)

    下面详细讲解一下“Intellij IDEA导入JAVA项目并启动(图文教程)”的完整攻略。 1. 下载Intellij IDEA 首先,我们需要下载安装Intellij IDEA,可以到官网(https://www.jetbrains.com/idea/)下载安装包并进行安装。 2. 导入JAVA项目 在Intellij IDEA中选择File ->…

    Java 2023年5月26日
    00
  • Java字符串写入文件三种方式的实现

    【Java字符串写入文件三种方式的实现】 写入文件是我们在Java程序开发中常见的任务之一。而字符串写入文件则更为常见,因为我们需要保存或输出的许多数据都是由字符串组成的。在这个攻略中,我将向你展示如何使用三种不同的方式在Java中将字符串写入文件。 方式一:使用字符流写入文件 使用字符流写入文件并不难,主要分为三步: 创建一个文件输出流。可以使用Java中…

    Java 2023年5月20日
    00
  • java基于jcifs.smb实现远程发送文件到服务器

    下面是关于“Java基于jcifs.smb实现远程发送文件到服务器”的完整攻略。 概述 jcifs.smb是一个java实现的SMB网络协议库,可以在java应用程序中实现与SMB服务器的连接。通过这个库,我们可以在java中实现与文件共享服务器之间的文件传输。在接下来的攻略中,我将详细介绍如何使用jcifs.smb库实现远程发送文件到服务器。 步骤一:引入…

    Java 2023年5月20日
    00
  • Spring Boot 中starter的原理详析

    Spring Boot 中 Starter 的原理详析 在 Spring Boot 中,Starter 是一种特殊的依赖,它可以帮助开发人员快速地集成和配置一组相关的依赖。在本文中,我们将深入探讨 Spring Boot 中 Starter 的原理。 Starter 的基本概念 在 Spring Boot 中,Starter 是一种特殊的依赖,它可以帮助开发…

    Java 2023年5月15日
    00
  • 在Spring Boot中使用Spring-data-jpa实现分页查询

    下面是在Spring Boot中使用Spring-data-jpa实现分页查询的完整攻略。 步骤一:添加依赖 在pom.xml文件中添加以下依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-s…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部