Stream 流式编程创建及其常用操作方法

news/2024/10/22 15:35:57/

目录

Stream 对象如何创建

Stream 常用的操作方法

1.过滤(Filter)

2.映射(Map)

3.扁平映射(FlatMap)

4.截断(Limit)

5.跳过(Skip)

6.排序(Sorted)

7.去重(Distinct)

8.汇总(Collect)

9.归约(Reduce)

10.统计(Summary Statistics)


Stream 对象如何创建

在Java中,可以通过多种方式创建Stream对象。下面列举了几个常用的方法:

  1. 从集合创建Stream:可以使用stream()方法从Collection接口的实现类(如List、Set)中创建Stream对象。
  2. 从数组创建Stream:可以使用Arrays.stream()方法从数组中创建Stream对象。
  3. 其他方法:还可以使用各种I/O操作、日期时间API等创建特定类型的Stream对象。
  4. 通过Stream的静态方法创建Stream:Stream类提供了一些静态方法来创建Stream对象。

        1)使用Stream.of()方法可以接受任意数量的参数,并将它们转换为Stream对象。

        2)使用Stream.iterate()方法可以生成一个包含无限序列的Stream对象,需要传入初始值和生成下一个元素的函数。

        3)使用Stream.generate()方法可以生成一个包含无限元素的Stream对象,需要传入生成元素的函数。

package com.common.demo.stream;import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.time.LocalDate;
import java.util.Arrays;
import java.util.List;
import java.util.stream.IntStream;
import java.util.stream.Stream;/*** @author Evan Walker* @version 1.0* @desc* @date 2023/10/09 21:46:25*/
public class StreamDemo {public static void main(String[] args) throws Exception {// 在Java中,可以通过多种方式创建Stream对象。下面列举了几个常用的方法:// 从集合创建Stream:可以使用stream()方法从Collection接口的实现类(如List、Set)中创建Stream对象。List<String> list = Arrays.asList("a", "b", "c");Stream<String> stream1 = list.stream();// 从数组创建Stream:可以使用Arrays.stream()方法从数组中创建Stream对象。int[] array = {1, 2, 3, 4, 5};IntStream stream2 = Arrays.stream(array);//其他方法:还可以使用各种I/O操作、日期时间API等创建特定类型的Stream对象。Stream<Path> stream3 = Files.list(Paths.get("dir"));Stream<LocalDate> stream7 = LocalDate.now().datesUntil(LocalDate.now().plusDays(7));//通过Stream的静态方法创建Stream:Stream类提供了一些静态方法来创建Stream对象。//使用Stream.of()方法可以接受任意数量的参数,并将它们转换为Stream对象。Stream<String> stream4 = Stream.of("a", "b", "c");//使用Stream.iterate()方法可以生成一个包含无限序列的Stream对象,需要传入初始值和生成下一个元素的函数。Stream<Integer> stream5 = Stream.iterate(0, n -> n + 1);// 使用Stream.generate()方法可以生成一个包含无限元素的Stream对象,需要传入生成元素的函数。Stream<Double> stream6 = Stream.generate(Math::random);}
}

        这些只是创建Stream对象的一些常用方法,根据不同的需求和数据源,可以选择适合的方式来创建Stream。创建Stream后,可以通过链式调用中间操作和终止操作来对数据进行处理和操作。

Stream 常用的操作方法

1.过滤(Filter)

    filter() 方法接受一个 Predicate 函数作为参数,用于过滤 Stream 中的元素。只有满足 Predicate 条件的元素会被保留下来。例如:

Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<Integer> filteredStream = stream.filter(n -> n % 2 == 0); // 过滤出偶数

2.映射(Map)

    map() 方法接受一个 Function 函数作为参数,用于对 Stream 中的元素进行映射转换。对每个元素应用函数后的结果会构成一个新的 Stream。例如:

Stream<String> stream = Stream.of("apple", "banana", "cherry"); 
Stream<Integer> mappedStream = stream.map(s -> s.length()); // 映射为单词长度

3.扁平映射(FlatMap)

    flatMap() 方法类似于 map() 方法,不同之处在于它可以将每个元素映射为一个流,并将所有流连接成一个流。这主要用于解决嵌套集合的情况。例如:

List<List<Integer>> nestedList = Arrays.asList( Arrays.asList(1, 2), Arrays.asList(3, 4), Arrays.asList(5, 6) ); 
Stream<Integer> flattenedStream = nestedList.stream().flatMap(List::stream); // 扁平化为一个流

4.截断(Limit)

    limit() 方法可以限制 Stream 的大小,只保留前 n 个元素。例如

Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5); 
Stream<Integer> limitedStream = stream.limit(3); // 只保留前 3 个元素

5.跳过(Skip)

    skip() 方法可以跳过 Stream 中的前 n 个元素,返回剩下的元素组成的新 Stream。例如:

Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5); 
Stream<Integer> skippedStream = stream.skip(2); // 跳过前 2 个元素

6.排序(Sorted)

    sorted() 方法用于对 Stream 中的元素进行排序,默认是自然顺序排序。还可以提供自定义的 Comparator 参数来指定排序规则。例如:

Stream<Integer> stream = Stream.of(5, 2, 4, 1, 3); 
Stream<Integer> sortedStream = stream.sorted(); // 自然顺序排序

7.去重(Distinct)

    distinct() 方法用于去除 Stream 中的重复元素,根据元素的 equals()hashCode() 方法来判断是否重复。例如:

Stream<Integer> stream = Stream.of(1, 2, 2, 3, 3, 3); 
Stream<Integer> distinctStream = stream.distinct(); // 去重

8.汇总(Collect)

    collect() 方法用于将 Stream 中的元素收集到结果容器中,如 List、Set、Map 等。可以使用预定义的 Collectors 类提供的工厂方法来创建收集器,也可以自定义收集器。例如:

Stream<String> stream = Stream.of("apple", "banana", "cherry"); 
List<String> collectedList = stream.collect(Collectors.toList()); // 收集为 List

9.归约(Reduce)

    reduce() 方法用于将 Stream 中的元素依次进行二元操作,得到一个最终的结果。它接受一个初始值和一个 BinaryOperator 函数作为参数。例如:

Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5); 
Optional<Integer> sum = stream.reduce((a, b) -> a + b); // 对所有元素求和

10.统计(Summary Statistics)

    summaryStatistics() 方法可以从 Stream 中获取一些常用的统计信息,如元素个数、最小值、最大值、总和和平均值。例如:

IntStream stream = IntStream.of(1, 2, 3, 4, 5); 
IntSummaryStatistics stats = stream.summaryStatistics(); 
System.out.println("Count: " + stats.getCount()); 
System.out.println("Min: " + stats.getMin()); 
System.out.println("Max: " + stats.getMax()); 
System.out.println("Sum: " + stats.getSum()); 
System.out.println("Average: " + stats.getAverage());

以上只是 Stream API 提供的一部分常用操作方法,还有许多其他操作方法,如匹配(Match)、查找(Find)、遍历(ForEach)等。

更多消息资讯,请访问昂焱数据(https://www.ayshuju.com)


http://www.ppmy.cn/news/1145372.html

相关文章

IDEA的使用(三)Debug(断点调试)(IntelliJ IDEA 2022.1.3版本)

编程过程中如果出现错误&#xff0c;需要查找和定位错误时&#xff0c;借助程序调试可以快速查找错误。 编写好程序后&#xff0c;可能出现的情况&#xff1a; 1.没有bug。 使用Debug的情况&#xff1a; 2.运行后&#xff0c;出现错误或者异常信息&#xff0c;但是通过日志文件…

基于位置的前馈神经网络

目录 1、什么是前馈全连接层 2、前馈全连接层的作用 3、代码实现FFN 1、什么是前馈全连接层 在Transformers中前馈全连接层就是具有两层线性层的全连接网络 2、前馈全连接层的作用 考虑注意力机制可能对复杂过程的拟合程度不够&#xff0c;通过增加家两层网络来增强模型的能…

【Python 千题 —— 基础篇】今年几岁啦

题目描述 题目描述 介绍自己的年龄。请使用 input 函数读入一个整数&#xff0c;表示自己的年龄&#xff0c;然后程序将自动生成介绍自己年龄的英文语句。 输入描述 输入一个整数&#xff0c;表示自己的年龄。 输出描述 程序将生成一个英文语句&#xff0c;以介绍自己的年…

nvidia 驱动问题

https://stackoverflow.com/questions/43022843/nvidia-nvml-driver-library-version-mismatch https://zhuanlan.zhihu.com/p/643773939

Can 通信-协议

概述 CAN 是 Controller Area Network 的缩写&#xff08;以下称为 CAN&#xff09;&#xff0c;是 ISO国际标准化的串行通信协议。 在当前的汽车产业中&#xff0c;出于对安全性、舒适性、方便性、低公害、低成本的要求&#xff0c;各种各样的电子控制系统 被开发了出来。由于…

JShaman JavaScript混淆加密工具,中英版本区别

JShaman JavaScript混淆加密工具&#xff0c;中英版本区别如下。 中文版&#xff0c;配置简单&#xff0c;网站功能多&#xff0c;支持代码提交、文件上传、WebAPI&#xff1b; 英文版&#xff0c;配置项较多&#xff0c;网站功能简约&#xff0c;不支持文件上传&#xff0c;…

LLaVA:大型语言和视觉助手,图片识别和理解能力让人惊叹

01简介 视觉指令调整&#xff1a;针对多模式 GPT-4 级别功能而构建的大型语言和视觉助手。 视觉聊天&#xff1a;构建多模式 GPT-4 级聊天机器人构建了包含 30 个未见过的图像的评估数据集&#xff1a;每个图像都与三种类型的指令相关联&#xff1a;对话、详细描述和…

PDF编辑和OCR文字识别工具ABBYY FineReader PDF

ABBYY FineReader PDF是一款专业的OCR文字识别和PDF编辑工具&#xff0c;可以帮助用户更好地处理和管理PDF文档。以下是ABBYY FineReader PDF的一些特点&#xff1a; 1. 文字识别精准&#xff1a;ABBYY FineReader PDF具有强大的OCR文字识别功能&#xff0c;可以将PDF中的文字…