Java中stream流的常见用法

这篇具有很好参考价值的文章主要介绍了Java中stream流的常见用法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Java中stream流的常见用法

这篇文章主要是记录stream流的用法,因为stream流比较常用,并且一些操作较复杂,记录在此,以后参考。

1、filter用法

主要是用来过滤集合中的元素,较常用。

        List<User> list = new ArrayList<>();
        list.add(new User(1, "小赵", "beijing"));
        list.add(new User(2, "小钱", "shanghai"));
        list.add(new User(3, "小孙", "tianjin"));
        list.add(new User(4, "小李", "nanjing"));
        list.add(new User(5, "小周", "shenzhen"));

        // 过滤出address=tianjin的
        List<User> list1 = list.stream().filter(item -> "tianjin".equals(item.getAddress())).collect(Collectors.toList());
        System.out.println(list1);

2、peek用法

主要是用来修改元素的状态,比如其中对象的字段等

        List<User> list = new ArrayList<>();
        list.add(new User(1, "小赵", "beijing"));
        list.add(new User(2, "小钱", "shanghai"));
        list.add(new User(3, "小孙", "tianjin"));
        list.add(new User(4, "小李", "nanjing"));
        list.add(new User(5, "小周", "shenzhen"));

        // peek操作主要用于修改集合中的元素
        // 修改元素中的address为guangzhou
        List<User> list2 = list.stream().peek(item -> item.setAddress("guangzhou")).collect(Collectors.toList());
        System.out.println(list2);

3、map用法

主要是用来替换集合中的元素

        List<User> list = new ArrayList<>();
        list.add(new User(1, "小赵", "beijing"));
        list.add(new User(2, "小钱", "shanghai"));
        list.add(new User(3, "小孙", "tianjin"));
        list.add(new User(4, "小李", "nanjing"));
        list.add(new User(5, "小周", "shenzhen"));

        // map操作主要是修改集合元素本身,也有一部分peek的功能
        // 将list的元素替换成元素的字段或者替换成其他的对象
        List<Integer> list3 = list.stream().map(User::getId).collect(Collectors.toList());
        System.out.println(list3);
        // map也可以用来peek的功能,比如下面例子,不过idea会提示用peek的
        List<User> list4 = list.stream().map(item -> {
            item.setAddress("beijing");
            return item;
        }).collect(Collectors.toList());
        System.out.println(list4);

4、flatmap用法

主要是将集合中的元素换成stream流

        List<String> list1 = Arrays.asList("a", "b");
        List<String> list2 = Arrays.asList("1", "2", "3");

        // flatmap主要是将集合中的元素换成stream流
        List<String> list3 = list1.stream().flatMap(item -> list2.stream().map(i -> item + i)).collect(Collectors.toList());
		// 将list1和list2中的元素拼接成list3
        // [a1, a2, a3, b1, b2, b3]
        System.out.println(list3);

5、list转map用法

这种场景是用于根据对象已知字段查找集合中对应元素

 		List<User> list = new ArrayList<>();
        list.add(new User(1, "小赵", "beijing"));
        list.add(new User(2, "小钱", "shanghai"));
        list.add(new User(3, "小孙", "tianjin"));
        list.add(new User(4, "小李", "nanjing"));
        list.add(new User(5, "小周", "shenzhen"));

        // 将list转成map
        // 一般这种场景是用于根据对象已知字段查找集合中对应元素
        // 这种一般用于key是唯一的,不然异常,或者用下一种
        Map<Integer, User> map = list.stream().collect(Collectors.toMap(User::getId, Function.identity()));
        Map<Integer, User> map1 = list.stream().collect(Collectors.toMap(User::getId, Function.identity(), (key1, key2) -> key2));

6、分组用法

这种一般用于按照元素的字段等条件进行分组文章来源地址https://www.toymoban.com/news/detail-528652.html

        List<User> list = new ArrayList<>();
        list.add(new User(1, "小赵", "beijing"));
        list.add(new User(2, "小钱", "shanghai"));
        list.add(new User(3, "小孙", "tianjin"));
        list.add(new User(4, "小李", "nanjing"));
        list.add(new User(5, "小周", "shenzhen"));

        Map<Integer, List<User>> map = list.stream().collect(Collectors.groupingBy(User::getId));

到了这里,关于Java中stream流的常见用法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Java8 Stream流的合并

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

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

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

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

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

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

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

    2024年04月22日
    浏览(79)
  • 带你走进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日
    浏览(60)
  • Java中Steam流的用法及使用备忘

    1-1 使用Collection下的 stream() 和 parallelStream() 方法 1-2 使用Arrays 中的 stream() 方法,将数组转成流 1-3 使用Stream中的静态方法:of()、iterate()、generate() 1-4 使用 BufferedReader.lines() 方法,将每行内容转成流 1-5 使用 Pattern.splitAsStream() 方法,将字符串分隔成流 2-1 筛选、去重与切片:

    2023年04月08日
    浏览(43)
  • java通过stream流的形式把列表中某个字段的值取出并生成列表

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

    2024年02月12日
    浏览(42)
  • 深度解析Java JDK 1.8中Stream流的源码实现:带你探寻数据流的奥秘

    1.1 什么是Stream流,以及它的主要特点和优势 什么是Stream流 ? jdk1.8 中引入的Stream流是一种用 函数式编程方式 操作集合的新特性,提供了一种更简洁、高效的方式来处理集合数据,可以将集合操作转换为一系列的流水线操作,实现更加优雅和功能强大的数据处理。 主要特点

    2024年03月16日
    浏览(57)
  • 由于对象流解析的数据与流的头部信息不匹配导致异常 java.io.StreamCorruptedException: invalid stream header: 7372001

    错误原因 先直接说错误原因 当使用对象流时,对象头和对象内容一起被写入输出流,而读取时也需要以相同的顺序读取对象头和对象内容 如果读取时的顺序与写入时的顺序不一致,或者在写入或读取对象头和对象内容之间更改了流的状态,则会出现 java.io.StreamCorruptedExcept

    2024年02月05日
    浏览(44)
  • Java Stream 最全操作用法合集

    Java 8 引入了Stream流的操作,让我们在开发的过程中感受到了很多的便利,小宋我也花时间总结了下关于Stream的堪称最全的使用方法,话不多说,直接放大招。 Java 8提供了两种方式去创建流: 1、stream stream是串行的,可以理解为它的执行是 按顺序执行 的。 2、parallelStream par

    2024年02月16日
    浏览(50)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包