java8新特性-Stream入门学习心得

Java8新特性-Stream入门学习心得

什么是Stream

Stream是Java8引入的一个新特性,它可以使我们更加方便地处理集合中的数据。Stream可以看做是一种高级版本的Iterator,它支持并行处理数据,并且提供了一组非常丰富的操作方法。

Stream的操作

下面介绍一下Stream的常用操作:

创建Stream

Stream有几种不同的创建方式:

  1. 从集合中创建:stream()parallelStream()方法
  2. 从数组中创建:Arrays.stream(T[] array)方法
  3. 从文件中创建:Files.lines(Path path)方法
  4. 通过Stream.of()方法创建一个包含一些元素的stream
  5. 通过Stream.builder()方法创建一个stream builder

中间操作

Stream 提供了很多中间操作(Intermediate Operations),这些操作不会改变 Stream 的数据源,但会返回一个全新的 Stream 对象。

常用的有:

  1. filter(Predicate<T> predicate)方法:根据指定的 Predicate 进行过滤。
  2. map(Function<T, R> mapper)方法:根据提供的函数映射每个元素。把 Stream 中的每一个元素 T 映射为一个新的元素 R,然后将这些新的元素组成一个 Stream
  3. flatMap(Function<T, Stream<R>> mapper):将生成的 Stream 进行合并。
  4. distinct():去重操作。
  5. sorted():排序。
  6. limit(long maxSize):只选择前 n 条数据。

终端操作

Stream 的终止操作(Terminal Operations)执行后,Stream 就被使用"废弃"了,后面的操作会产生 IllegalStateException。

常用的有:

  1. forEach(Consumer<T> action)方法:对每个元素执行操作,无返回值。
  2. count()方法:统计元素个数。
  3. collect(Collector<T,A,R> collector)方法:根据提供的 Collector 实现进行转换成对应的集合。
  4. reduce(BinaryOperator<T> accumulator)方法:对数据进行归约操作。
  5. max()min()方法:获取 Stream 中最大值和最小值。
  6. findFirst()findAny()方法:获取第一个和任意一个元素。

示例说明

下面举两个简单的例子,说明Stream的用法。

例子1:筛选成年龄大于等于18岁的人

List<Person> personList = Arrays.asList(
    new Person("张三", 15),
    new Person("李四", 18),
    new Person("王五", 21),
    new Person("赵六", 25)
);

List<Person> adultList = personList.stream()
    .filter(person -> person.getAge() >= 18)
    .collect(Collectors.toList());

上面的代码中,我们通过filter方法从personList中筛选年龄大于等于18岁的人,然后将这些人组成一个新的List。

例子2:对数字进行平方计算

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

List<Integer> squareList = numberList.stream()
    .map(number -> number * number)
    .collect(Collectors.toList());

上面的代码中,我们通过map方法将numberList中的每个数平方,然后将这些平方的数组成一个新的List。

总结

Stream的引入使得我们对集合中的数据处理变得更加方便,并且代码更加简洁易懂。熟练掌握Stream API可以大大提高开发效率。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java8新特性-Stream入门学习心得 - Python技术站

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

相关文章

  • jackson 实体转json 为NULL或者为空不参加序列化(实例讲解)

    Jackson 实体转 JSON 为 NULL 或者为空不参加序列化 为什么要从 JSON 反序列化成实体对象? 在进行 web 开发过程中,前后端数据传输离不开 JSON 字符串。服务器需要将实体对象转成 JSON 字符串返回给前端,而前端也需要将 JSON 字符串转成实体对象进行传入后端。Jackson 可以方便的实现该过程。 实现实体转 JSON 基础…

    Java 2023年5月26日
    00
  • java根据开始时间结束时间计算中间间隔日期的实例代码

    以下是Java根据开始时间结束时间计算中间时间间隔的实例代码完整攻略。 标题 Java根据开始时间结束时间计算中间时间间隔的实例代码 描述 在Java中,我们经常需要在两个日期之间计算天数、小时数或分钟数。此时需要使用Java提供的时间类库。Java日期类库中的Date和Calendar类提供了很多用于处理日期和时间的方法。下面我们将演示如何使用Java代码…

    Java 2023年6月1日
    00
  • 浅析Java.IO输入输出流 过滤流 buffer流和data流

    浅析Java.IO输入输出流 过滤流 Buffer流和Data流 什么是Java IO Java IO 是针对输入和输出数据的流处理 API。Java IO 库中包含了一组类和接口,提供了对标准输入、输出和文件系统的访问。 在 Java IO 中,数据承载的载体为流(stream)。流是指在数据源和数据目的地之间建立起的一条虚拟的传输通道,数据按照字节的方式…

    Java 2023年5月26日
    00
  • SpringBoot多数据源配置并通过注解实现动态切换数据源

    下面就为你详细讲解如何实现Spring Boot多数据源配置,并通过注解实现动态切换数据源的完整攻略。 1. 添加依赖 首先,在pom.xml文件中添加Spring Boot与MySQL相关的依赖: <dependencies> <!– Spring Boot相关依赖 –> <dependency> <group…

    Java 2023年5月20日
    00
  • Sprint Boot @EnableScheduling使用方法详解

    Spring Boot的@EnableScheduling注解 在Spring Boot中,@EnableScheduling注解用于启用定时任务的支持。使用@EnableScheduling注解可以将带有@Scheduled注解的方法标记为定时任务,并在应用程序启动时自动注册这些任务。本文将详细介绍@EnableScheduling注解的作用和使用方法,并…

    Java 2023年5月5日
    00
  • Java中如何获取mysql连接的3种方法总结

    下面我讲一下Java中如何获取MySQL连接的3种方法总结。 1. JDBC DriverManager JDBC DriverManager是Java JDBC API提供的一种获取数据库连接的方式,使用此方法需要导入java.sql.DriverManager类。下面是一个使用JDBC DriverManager获取MySQL连接的示例。 import …

    Java 2023年5月19日
    00
  • Java编程ssh整合常见错误解析

    Java编程SSH整合常见错误解析 SSH(Struts2+Spring3+Hibernate3)是目前Java企业级Web应用开发中比较流行的一种技术架构,尤其是在传统JSP+Servlet的基础上,尤其是对于Java初学者来说,它的学习曲线相对来说比较平滑。然而在SSH的整合过程中,由于各种原因,很容易出现各种错误,本文将一一进行详细介绍。 错误一:Cl…

    Java 2023年5月20日
    00
  • Java利用文件输入输出流实现文件夹内所有文件拷贝到另一个文件夹

    这里简要讲解一下如何使用Java的文件输入输出流实现文件夹内所有文件拷贝到另一个文件夹。 用途 该功能可帮助用户将一个文件夹里的所有文件拷贝到另一个目录下,实现备份和移植数据的功能。 实现步骤 实现该功能需要以下几个步骤: 找到源文件夹和目标文件夹 获取源文件夹下的所有文件及文件夹 遍历源文件夹下的每个文件,若是文件则新建文件并写入,若是文件夹则递归调用本身…

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