java 8 stream流的19种用法,可应对大多数集合的处理场景

这篇具有很好参考价值的文章主要介绍了java 8 stream流的19种用法,可应对大多数集合的处理场景。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

java 8的Stream API是一种非常强大的集合处理工具,它提供了一种新的、高效的、声明式的方式来处理集合数据。下面我们就来看一下Java 8 Stream API的所有用法。

1.创建Stream

可以使用Stream.of()方法创建一个Stream:

Stream<String> stream = Stream.of("a", "b", "c");

也可以使用集合的stream()方法创建一个Stream:

List<String> list = Arrays.asList("a", "b", "c");
Stream<String> stream = list.stream();

2.过滤数据

可以使用filter()方法过滤Stream中的元素:

Stream<String> stream = Stream.of("a", "b", "c");
stream = stream.filter(s -> s.startsWith("a"));

上面的代码将过滤出以字母"a"开头的字符串。

3.转换数据

可以使用map()方法将Stream中的元素转换成其他类型:

Stream<String> stream = Stream.of("a", "b", "c");
stream = stream.map(s -> s.toUpperCase());

上面的代码将Stream中的字符串都转换成大写字母。

4.合并Stream

可以使用concat()方法将多个Stream合并成一个Stream:

Stream<String> stream1 = Stream.of("a", "b", "c");
Stream<String> stream2 = Stream.of("d", "e", "f");
Stream<String> stream = Stream.concat(stream1, stream2);

上面的代码将stream1和stream2合并成一个Stream。

5.收集数据

可以使用collect()方法将Stream中的元素收集到一个集合中:

List<String> list = Stream.of("a", "b", "c").collect(Collectors.toList());

上面的代码将Stream中的元素收集到一个List中。

6.统计数据

可以使用count()、min()、max()等方法对Stream中的元素进行统计:

long count = Stream.of("a", "b", "c").count();
String min = Stream.of("a", "b", "c").min(Comparator.comparing(String::valueOf)).get();
String max = Stream.of("a", "b", "c").max(Comparator.comparing(String::valueOf)).get();

上面的代码分别统计Stream中的元素个数、最小值和最大值。

7.排序数据

可以使用sorted()方法对Stream中的元素进行排序:

List<String> list = Stream.of("c", "a", "b").sorted().collect(Collectors.toList());

上面的代码将Stream中的元素按字典序排序,并将排序结果收集到一个List中。

8.去重数据

可以使用distinct()方法对Stream中的元素进行去重:

List<String> list = Stream.of("a", "b", "c", "a").distinct().collect(Collectors.toList());

上面的代码将Stream中的重复元素去掉,并将去重结果收集到一个List中。

9.限制数据

可以使用limit()方法限制Stream中的元素个数:

List<String> list = Stream.of("a", "b", "c").limit(2).collect(Collectors.toList());

上面的代码将Stream中的元素个数限制为2,并将限制结果收集到一个List中。

10.跳过数据

可以使用skip()方法跳过Stream中的前n个元素:

List<String> list = Stream.of("a", "b", "c").skip(1).collect(Collectors.toList());

上面的代码将跳过Stream中的第一个元素,并将剩余元素收集到一个List中。

11.匹配数据

可以使用anyMatch()、allMatch()、noneMatch()等方法对Stream中的元素进行匹配:

boolean anyMatch = Stream.of("a", "b", "c").anyMatch(s -> s.startsWith("a"));
boolean allMatch = Stream.of("a", "b", "c").allMatch(s -> s.length() == 1);
boolean noneMatch = Stream.of("a", "b", "c").noneMatch(s -> s.length() == 3);

上面的代码分别判断Stream中是否有元素以字母"a"开头,是否所有元素长度都为1,是否没有元素长度为3。

12.查找数据

可以使用findFirst()、findAny()等方法查找Stream中的元素:

Optional<String> first = Stream.of("a", "b", "c").findFirst();
Optional<String> any = Stream.of("a", "b", "c").findAny();

上面的代码分别查找Stream中的第一个元素和任意一个元素,并将查找结果封装成Optional对象返回。

13.归约数据

可以使用reduce()方法将Stream中的元素归约为一个结果:

Optional<Integer> reduce = Stream.of(1, 2, 3).reduce((x, y) -> x + y);

上面的代码将Stream中的元素相加得到一个结果,并将结果封装成Optional对象返回。

14.映射数据
可以使用flatMap()方法将Stream中的元素映射成多个元素:

List<String> list = Stream.of("a,b,c", "d,e,f").flatMap(s -> Stream.of(s.split(","))).collect(Collectors.toList());

上面的代码将Stream中的字符串按逗号分隔,并将分隔结果收集到一个List中。

15.分组数据

可以使用groupingBy()方法将Stream中的元素按照某个属性进行分组:

Map<Integer, List<String>> map = Stream.of("a", "b", "cd", "efg").collect(Collectors.groupingBy(String::length));

上面的代码将Stream中的元素按照长度进行分组,并将分组结果收集到一个Map中。

16.分区数据

可以使用partitioningBy()方法将Stream中的元素按照某个条件进行分区:

Map<Boolean, List<String>> map = Stream.of("a", "b", "cd", "efg").collect(Collectors.partitioningBy(s -> s.length() == 1));

上面的代码将Stream中的元素按照长度是否为1进行分区,并将分区结果收集到一个Map中。

17.串行执行

可以使用sequential()方法将Stream的执行模式设置为串行模式:

Stream<String> stream = Stream.of("a", "b", "c").sequential();

上面的代码将Stream的执行模式设置为串行模式。

18.并行执行

可以使用parallel()方法将Stream的执行模式设置为并行模式:

Stream<String> stream = Stream.of("a", "b", "c").parallel();

上面的代码将Stream的执行模式设置为并行模式。

19.使用Optional

在Stream中,有些方法的返回值是Optional类型,表示存在或不存在某个值。我们可以使用Optional来处理这种情况,避免空指针异常:

Optional<String> optional = Stream.of("a", "b", "c").filter(s -> s.startsWith("d")).findFirst();
String result = optional.orElse("default");

上面的代码过滤出以字母"d"开头的元素,如果没有则返回"default"。

以上就是Java 8 Stream API的所有用法,只要理解了这些用法,基本上就可以应对大多数集合处理的场景了。文章来源地址https://www.toymoban.com/news/detail-402295.html

到了这里,关于java 8 stream流的19种用法,可应对大多数集合的处理场景的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • R语言【base】——data.frame():创建数据框,紧耦合的变量集合,它们共享矩阵和列表的许多属性,被大多数R建模软件用作基本数据结构。

    Package  base  version 4.2.0 创建数据框(data frame),紧耦合的变量集合,它们共享矩阵和列表的许多属性,被大多数R建模软件用作基本数据结构。 数据框:一种在统计分析和数据处理中常用的数据结构,由行和列组成,类似于电子表格。 参数【...】:这些参数的形式是 value 或

    2024年02月21日
    浏览(42)
  • Java中stream流的常见用法

    这篇文章主要是记录stream流的用法,因为stream流比较常用,并且一些操作较复杂,记录在此,以后参考。 1、filter用法 主要是用来过滤集合中的元素,较常用。 2、peek用法 主要是用来修改元素的状态,比如其中对象的字段等 3、map用法 主要是用来替换集合中的元素 4、flatma

    2024年02月12日
    浏览(51)
  • Java——Stream流的学习

    在开发过程中,经常或忽略流的使用,导致用的不熟练,于是抽时间系统的学习下stream的使用,找了哔哩哔哩的教程跟着看看练练。 创建Book、Aurhor实体类,初始化数据 filter 对流中的操作进行过滤,符合条件的返回 使用的函数式接口是:Predicate,参数是一个实体,拥有抽象

    2024年02月20日
    浏览(44)
  • Java——Stream流的peek方法

    Java Stream中的peek()方法也是用于查看每个元素,但不改变流的操作的方法。它接收一个Consumer类型的参数,该参数用于针对每个元素执行副作用操作。该方法返回一个与原始流相同的新流,因此可以进行链式操作。 使用peek()方法可以方便地在流处理过程中调试或记录某些数据

    2024年01月20日
    浏览(38)
  • Java8 Stream流的合并

    最近的需求里有这样一个场景,要校验一个集合中每个对象的多个Id的有效性。比如一个Customer对象,有3个Id: id1 , id2 , id3 ,要把这些Id全部取出来,然后去数据库里查询它们是否存在。 通常情况下,我们都是从集合中取出对象的某一个字段,像这样: 现在要取3个字段,

    2024年02月02日
    浏览(45)
  • Java8的Stream流的学习

    Stream可以由数组或集合创建,对流的操作分为两种: 中间操作,每次返回一个新的流,可以有多个。 终端操作,每个流只能进行一次终端操作,终端操作结束后流无法再次使用。终端操作会产生一个新的集合或值。 stream和parallelStream的简单区分: stream是顺序流,由主线程按

    2024年02月07日
    浏览(35)
  • Java,SpringBoot中对Stream流的运用

    详细参考:java 1.8 stream 应用-22种案例_java1.8 流案例-CSDN博客 1. 遍历  2. 汇总

    2024年02月22日
    浏览(41)
  • Java8特性,Stream流的使用,收集成为map集合

    Java 8引入了Stream API,这是Java集合操作的一个重大改进。Stream API提供了一种高效且易于使用的处理数据的方式。 Stream是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列。注意:Stream自己不会存储元素,它不会改变源对象,反而它的操作会返回一个全新的Strea

    2024年04月22日
    浏览(68)
  • 带你走进Java8新特性Stream流的小世界

    目录 一. 什么是流(Stream) 1.1 流的定义 1.2 流的特点 1.3 操作流 1.4 创建流 二. 流的中间操作 2.1 流的筛选与切片 2.1.1 filter 2.1.2 limit 2.1.3 skip 2.1.4 distinct 2.2 流的映射 2.2.1 map 2.2.2 flatMap 2.3 流的排序 2.3.1 sort 三. 流的终止操作 3.1 流的查找与匹配 3.1.1 allMatch 3.1.2 anyMatch 3.1.3 none

    2024年01月24日
    浏览(55)
  • java通过stream流的形式把列表中某个字段的值取出并生成列表

    可以使用Java 8中引入的Stream API来实现这一功能。例如,假设你有一个类名为Person的列表,并且你想要从这个列表中提取所有人的姓名并生成一个新的列表。你可以这样做: 这段代码首先使用 stream() 方法将列表转换为流。然后,使用 map() 方法对流中的每个元素执行一个转换函

    2024年02月12日
    浏览(36)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包