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 键盘输入的多种实现方法

    关于“Java键盘输入的多种实现方法”的攻略,下面就给您详细介绍: 使用 Scanner 类的 next() 方法进行输入 Scanner 是一个内置于 JDK 的类,专门用于输入处理。首先需要导入 java.util.Scanner 类。 示例代码: import java.util.Scanner; public class KeyboardInputD…

    Java 2023年5月18日
    00
  • JAVA获取文件绝对路径的方法

    获取Java文件的绝对路径可助于在程序中读取或写入文件。下面将详细介绍Java中获取文件绝对路径的方法。 1. 通过File类的getAbsolutePath()方法获取文件路径 使用File类的getAbsolutePath()方法获取文件的绝对路径非常简单,只需要将文件对象作为参数传入即可。示例如下: File file = new File(&quot…

    Java 2023年5月20日
    00
  • spring boot 2.x静态资源会被拦截器拦截的原因分析及解决

    在Spring Boot 2.x版本中,静态资源默认会被拦截器拦截,这是因为Spring Boot引入了WebMvcConfigurerAdapter类,该类覆盖了addResourceHandlers方法,将/**路径下的所有请求都拦截了,并尝试寻找相应的静态资源。 要解决这个问题,需要在自己的项目中进行一些配置。 首先,在项目的配置文件applicati…

    Java 2023年6月3日
    00
  • Spring jackson原理及基本使用方法详解

    Spring Jackson原理及基本使用方法详解 什么是Jackson? Jackson是一个开源的Java库,用于处理JSON格式的文本数据。它可以将Java对象序列化为JSON格式的数据,也可以将JSON格式的数据反序列化为Java对象。 什么是Spring Jackson? Spring Jackson是Spring框架中对Jackson的集成。通过…

    Java 2023年5月26日
    00
  • Spring Security十分钟入门教程

    Spring Security 十分钟入门教程 Spring Security 是一个基于 Spring 框架的安全框架,能够为 web 应用程序提供身份验证和授权的支持。 开始之前 在开始学习之前,需要具备以下知识: Spring 框架基础 Maven 项目管理工具 Spring Boot 基础知识 步骤 步骤一:创建一个 Spring Boot Web …

    Java 2023年6月3日
    00
  • 解决springmvc使用@PathVariable路径匹配问题

    解决SpringMVC使用@PathVariable路径匹配问题 在SpringMVC中,@PathVariable注解可以用于将URI中占位符的值绑定到方法的参数中,以此来实现RESTful风格的API。但是,在实际开发中,可能会遇到一些问题,比如@PathVariable无法匹配特殊字符。 为了解决这个问题,我们可以按照以下步骤进行操作: 1.在web.…

    Java 2023年6月15日
    00
  • Mybatis-Plus Wrapper条件构造器超详细使用教程

    下面是Mybatis-Plus Wrapper条件构造器超详细使用教程的完整攻略。 一、什么是Mybatis-Plus Wrapper条件构造器? Mybatis-Plus是Mybatis的增强工具,在实际开发中经常使用。其中Mybatis-Plus Wrapper是一个条件构造器,它能够帮助程序员拼装复杂的查询条件。 举个例子:我们需要查询表中age大于1…

    Java 2023年5月20日
    00
  • springboot使用校验框架validation校验的示例

    下面我将为您详细讲解 “springboot使用校验框架validation校验的示例”。 1. 简介 Spring Boot是一个非常受欢迎的Java开发框架,同样,校验数据是每个Web应用的基本要求之一。在Spring Boot中,可以使用Validation框架轻松地完成数据校验。 Validation是Java Bean Validation API…

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