Java 8中的Stream流:多种构建方式及操作示例

这篇具有很好参考价值的文章主要介绍了Java 8中的Stream流:多种构建方式及操作示例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言 

Java 8 引入了 Stream API,这是一种强大的工具,用于处理集合数据。Stream 允许你以声明性的方式对数据进行操作,这意味着你可以轻松地执行过滤、映射、排序、聚合等操作,而无需编写复杂的迭代代码。本文将探讨 Java 8 中 Stream 流的多种构建方式,以帮助你更好地利用这一强大功能。

Java 8,Stream流,构建方式,操作示例,

什么是 Stream 流? 

在深入探讨如何构建 Stream 流之前,让我们先理解 Stream 是什么以及它为什么如此重要。

Stream 是 Java 8 引入的一种抽象的数据类型,它代表一个序列化的数据集合。Stream 不是一个数据结构,而是一种用于处理数据的工具,它允许你执行各种操作,例如过滤、映射、排序和聚合,以便提取所需的信息。Stream 的主要特点包括:

声明性: 使用 Stream,你可以告诉程序你要做什么,而不是怎么做。这使得代码更容易阅读和维护。
懒加载: Stream 操作不会立即执行,而是在需要的时候才进行计算。这可以提高性能,因为它避免了不必要的计算。
可并行化: Stream 操作可以自动并行执行,充分利用多核处理器的性能。

创建 Stream 流 

Java 8 提供了多种方式来创建 Stream 流,以下是其中一些常见的方式。

Java 8,Stream流,构建方式,操作示例,

1. 从集合创建 Stream 

你可以使用集合类的 stream 方法或 parallelStream 方法来创建一个 Stream 流。这是使用 Stream 的最常见方式,因为你通常需要在已有的数据集合上执行操作。

List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");

// 从 List 创建 Stream
Stream<String> nameStream = names.stream();

// 从 Set 创建并行 Stream
Stream<String> parallelNameStream = new HashSet<>(names).parallelStream();


2. 从数组创建 Stream

你可以使用 Arrays.stream 方法来从数组创建 Stream。

int[] numbers = {1, 2, 3, 4, 5};

// 从数组创建 IntStream
IntStream numberStream = Arrays.stream(numbers);


3. 使用 Stream.of 创建 Stream 

你可以使用 Stream.of 方法创建包含指定元素的 Stream。

Stream<String> stream = Stream.of("Apple", "Banana", "Cherry");


4. 使用 Stream.generate 创建 Stream 

你可以使用 Stream.generate 方法创建一个无限流,通过传入一个 Supplier 函数来生成流中的元素。

Stream<String> infiniteStream = Stream.generate(() -> "Hello, World!");


这将创建一个无限包含 “Hello, World!” 的 Stream。你可以使用 limit 方法来限制流的大小。

Stream<String> limitedStream = Stream.generate(() -> "Hello, World!").limit(5);


5. 使用 Stream.iterate 创建 Stream 

你可以使用 Stream.iterate 方法创建一个包含迭代元素的 Stream。你需要提供一个初始元素和一个 UnaryOperator 函数,该函数定义了如何生成下一个元素。

Stream<Integer> numbers = Stream.iterate(0, n -> n + 2);


这将创建一个包含偶数的无限流。同样,你可以使用 limit 方法来限制流的大小。

Stream<Integer> limitedNumbers = Stream.iterate(0, n -> n + 2).limit(10);


Stream 流的操作 

一旦你创建了一个 Stream,你可以对其执行各种操作。以下是一些常见的操作:

1. 过滤数据

 你可以使用 filter 方法来过滤流中的元素。例如,如果你有一个包含数字的流,你可以过滤出所有的偶数。

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

List<Integer

> evenNumbers = numbers.stream()
    .filter(n -> n % 2 == 0)
    .collect(Collectors.toList());

// 输出:[2, 4, 6, 8, 10]
System.out.println(evenNumbers);


2. 映射数据 

你可以使用 map 方法来对流中的每个元素执行一个函数,并将结果收集到一个新的流中。

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

List<Integer> nameLengths = names.stream()
    .map(String::length) // 映射为字符串长度
    .collect(Collectors.toList());

// 输出:[5, 3, 7]
System.out.println(nameLengths);


3. 排序数据 

 你可以使用 sorted 方法对流中的元素进行排序。

List<String> fruits = Arrays.asList("Banana", "Apple", "Cherry");

List<String> sortedFruits = fruits.stream()
    .sorted()
    .collect(Collectors.toList());

// 输出:[Apple, Banana, Cherry]
System.out.println(sortedFruits);


4. 聚合数据 

你可以使用各种聚合操作,如 reduceminmaxcount 等,来汇总流中的元素。

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

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

long count = numbers.stream()
    .count();

// 输出:sum = 38, count = 11
System.out.println("sum = " + sum + ", count = " + count);


将多个流合并 

你可以使用 Stream.concat 方法将两个流合并为一个流。这在你需要合并多个数据源时非常有用。

Stream<String> stream1 = Stream.of("A", "B", "C");
Stream<String> stream2 = Stream.of("X", "Y", "Z");

Stream<String> mergedStream = Stream.concat(stream1, stream2);

// 输出:[A, B, C, X, Y, Z]
System.out.println(mergedStream.collect(Collectors.toList()));


Java 8,Stream流,构建方式,操作示例,

结语


Stream 是 Java 8 引入的一项强大的功能,使数据处理变得更加简单和高效。你可以使用多种方式来创建 Stream 流,并对其进行各种操作。这使得你能够以声明性的方式处理集合数据,而无需编写复杂的迭代代码。希望本文中的示例代码和解释有助于你更好地理解 Stream 的使用方法,以提高你的 Java 编程技能。 Stream 的学习曲线可能会有些陡峭,但一旦掌握,它将成为你处理数据的得力工具。文章来源地址https://www.toymoban.com/news/detail-786064.html

到了这里,关于Java 8中的Stream流:多种构建方式及操作示例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 4、Elasticsearch7.6.1 Java api操作ES(CRUD、两种分页方式、高亮显示)和Elasticsearch SQL详细示例

    1、介绍lucene的功能以及建立索引、搜索单词、搜索词语和搜索句子四个示例实现 2、Elasticsearch7.6.1基本介绍、2种部署方式及验证、head插件安装、分词器安装及验证 3、Elasticsearch7.6.1信息搜索示例(索引操作、数据操作-添加、删除、导入等、数据搜索及分页) 4、Elasticsearch7

    2024年02月16日
    浏览(79)
  • Java list 分页(多种方式)

    Java list 分页(多种方式) 方式一: 方式二: 方式三: 方式四: 例子:

    2024年02月09日
    浏览(45)
  • Springboot的多种部署方式和Linux具体的 service 操作介绍

    Springboot 内置了 tomcat,部署十分的方便,无需额外的应用服务器。但是在部署过程中,却有很多种方式 本文总结在工作中常见的 linux 部署方式 linux 可以通过 nohup 命令将项目部署在后台,即使终端退出,进程仍然在运行,并且会生成一个 nohup.out 文件 但是… 想要结束进程,

    2024年02月13日
    浏览(42)
  • Java连接ES的多种方式

    前言 本篇文章主要介绍:使用Basic、Transport、Kerberos三种方式连接ES Bisic方式 Transport方式 Kerberos方式 正常访问 综合测试 EsConnectDemo 配置文件 kerberos.properties 文中提到的工具类 PropertiesUtil JaasKrbUtil SpnegoHttpClientConfigCallbackHandler

    2024年02月11日
    浏览(35)
  • java stream去重的几种方式

    这个方法会根据元素的 hashCode() 和 equals() 方法来判断是否重复。如果是自定义的类,需要重写这两个方法。 示例: 这个方法可以根据元素的某个属性或者多个属性来去重,比如 name 或者 name+address。这个方法会使用 TreeSet 来排序元素,所以不能保持原来的顺序。 示例: 这个方

    2024年02月13日
    浏览(68)
  • Java Stream流 Map 分组方式汇总

    java老式的分组方式(对list for循环然后 if判断 放入map) 代码复杂,易读性差,维护性差,故本文汇总了Stream流中的分组方法供大家参考,如对您有帮助,请抬抬高贵的小手点个赞吧,欢迎大佬留下高见 (以下方法默认都是java8的方法,java9新增方法有标注) 按颜色分组 打印Map结果: {红色

    2024年02月06日
    浏览(42)
  • Java如何遍历Map对象集合(多种方式)6种方式

    今天比昨天,更优秀 Map简介 Map是用于保存具有映射关系的数据,保存两组值,key和value,这两组值可以是任何应用类型的数据。 Map典型的实现类是HashMap、Hashtable(HashMap子类还有LinkedHashMap)、SortedMap子接口及实现类TreeMap、WeakHashMap、IndentityHashMap等 Map遍历第一种 注意:如果

    2024年02月08日
    浏览(49)
  • java— 读取JSON文件的多种方式

    大部分内容参考自: https://blog.csdn.net/csdn_halon/article/details/120287992 在开发过程中有时会遇到需要读取本地.json文件的需求,通常会自己写Reader代码去读,但是这么做写出来的代码有些繁琐(需要关流、创建StringBuilder对象等操作)。最近发现几个小工具可以让需求代码变得更加

    2024年02月11日
    浏览(54)
  • Java 中多种循环 Map 的方式详解

    在 Java 中,我们经常需要对 Map 类型的数据进行遍历,以便进行数据处理或输出。Java 提供了多种循环 Map 的方式,每种方式都有其适用的场景。本文将介绍 Java 中常见的几种循环 Map 的方式,并对它们进行详细的讲解。 在这种方式中,通过调用 entrySet() 方法,将 Map 转换成

    2024年02月04日
    浏览(41)
  • Java Stream 处理分组后取每组最大&Stream流之list转map、分组取每组第一条&Java 8 Collectors:reducing 示例(List分组取最值)

    有一个需求功能:先按照某一字段分组,再按照另外字段获取最大的那个 先根据appId分组,然后根据versionSort取最大. JDK1.8推出的stream流能极大的简化对集合的操作,让代码更美观,老规矩,直接上代码。 取list中对象的某个属性作为唯一key,对象作为value形成一个map集合,能

    2024年02月16日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包