Java Stream流封装速度竟然如此给力!

简介: 案例入门学习Stream !
【辰兮要努力】:hello你好我是辰兮,很高兴你能来阅读,博客昵称是希望自己能不断精进,向着优秀程序员前行!

博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端、后台、数据库、项目案例等相关知识点总结,感谢你的阅读和关注,希望我的博客能帮助到更多的人,分享获取新知,大家一起进步!

吾等采石之人,应怀大教堂之心,愿你们奔赴在各自的热爱中…

一、Stream序言

Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。

使用Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数据库查询。也可以使用 Stream API 来并行执行操作。
在这里插入图片描述

简而言之,Stream API 提供了一种高效且易于使用的处理数据的方式。


二、Stream测试

项目案例:第一次接触Java-Stream流,记得当时要查询帖子列表,本身查询就是三个表的连表查询外,还要封装点赞,是否点赞,等等一系列属性,用传统的for循环封装速度太慢了,会带给用户不好体验,于是一个大佬帮我优化了一下代码用stream流帮我封装等一系列属性时间也节省了三分之二的时间

爱了爱了,来找找网上案例一起尝试学习一下

在这里插入图片描述

整理了一下常见的for循环foreach等等和stream流的比较

public class Test {
    public static void main(String[] args) {
        // 测试源
        List<String> sourceList = new ArrayList<>();
        for (int i = 0;i<10000;i++) {
            sourceList.add("第" + i + "条数据");
        }
        System.out.println("数据条数:" + sourceList.size());
        long a1=System.currentTimeMillis();
        for (int i = 0;i < sourceList.size();i++) {
            doSome();
        }
        long a2=System.currentTimeMillis();
        System.out.println("普通for循环用时:" + (a2-a1));


        long b1=System.currentTimeMillis();
        for (String t:sourceList) {
            doSome();
        }
        long b2=System.currentTimeMillis();
        System.out.println("增强for循环用时:" + (b2-b1));

        long c1=System.currentTimeMillis();
        sourceList.forEach((t)-> doSome());
        long c2=System.currentTimeMillis();
        System.out.println("forEach循环用时:" + (c2-c1));

        long d1=System.currentTimeMillis();
        sourceList.parallelStream().forEach((t)-> doSome());
        long d2=System.currentTimeMillis();
        System.out.println("forEach-Stream循环用时:" + (d2-d1));



    }
    private static void doSome() {
        try {
            Thread.sleep(1);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

当我们数据是一万条的时候可以发现forEach-Stream流明显的速度优势

数据条数:10000
普通for循环用时:19804
增强for循环用时:19645
forEach循环用时:19707
forEach-Stream循环用时:3702

数据量比较小的时候好像看不到明显的优势

数据条数:10
普通for循环用时:21
增强for循环用时:20
forEach循环用时:62
forEach-Stream循环用时:27

三、Stream小结

JDK1.8的stream流操作和for循环操作到底谁的性能高?

如果在循环体中有复杂的业务、调用远程接口或数据库就用stream,因为stream是多线程方式并行执行,但是其调用线程池必然会消耗性能,所以简单的操作固然还是for循环效率高。具体的应用我们更加具体的业务场景来。

stream().forEach用的多线程方式,其调用线程池的时候必然会耗费更多的时间。但如果你在循环内要处理的事情很多,或者要循环调用远程接口/数据库的时候,无疑极大的提升了效率

在编写代码的过程中,我们究竟采用哪种遍历方式比较好?!

这个得有一个选择标准,如果单纯的以运行效率为主,那还是采用传统的for循环,若要简化代码量,那就选用stream。


使用 Stream 的建议

  • 1、简单的迭代逻辑,可以直接使用 iterator,对于有多步处理的迭代逻辑,可以使用 stream,损失一点几乎没有的效率,换来代码的高可读性是值得的;
  • 2、单核 cpu 环境,不推荐使用 parallel stream,在多核 cpu 且有大数据量的条件下,推荐使用 paralle stream;
  • 3、stream 中含有装箱类型,在进行中间操作之前,最好转成对应的数值流,减少由于频繁的拆箱、装箱造成的性能损失;

Stream小结

我们可以把Stream当成一个高级版本的Iterator。原始版本的Iterator,用户只能一个一个的遍历元素并对其执行某些操作;高级版本的Stream,用户只要给出需要对其包含的元素执行什么操作,比如“封装某些属性”、“过滤长度小于3的字符串”、“获取每个字符串的首字母”等,具体的操作还是要进一步学习Stream流的相关用法,值得学习实践。


The best investment is to invest in yourself.

在这里插入图片描述

愿你们奔赴在自己的热爱里!

目录
相关文章
|
1月前
|
SQL Java API
使用Java Stream API简化集合操作
使用Java Stream API简化集合操作
|
6天前
|
缓存 前端开发 Java
【前端学java】java基础巩固复习巩固语法练习-工具类的封装(14)
【8月更文挑战第10天】java基础巩固,工具类的封装
11 1
【前端学java】java基础巩固复习巩固语法练习-工具类的封装(14)
|
4天前
|
Java API 开发者
|
11天前
|
存储 算法 Oracle
19 Java8概述(Java8概述+lambda表达式+函数式接口+方法引用+Stream+新时间API)
19 Java8概述(Java8概述+lambda表达式+函数式接口+方法引用+Stream+新时间API)
39 8
|
7天前
|
Java
Java 新手入门:Java 封装、继承、多态详解
Java 新手入门:Java 封装、继承、多态详解
17 1
|
9天前
|
自然语言处理 Java API
"告别Java8 Stream噩梦,JDFrame神器来袭!让你的代码简洁如诗,效率翻倍,编程新体验等你尝鲜!"
【8月更文挑战第11天】Java 8的Stream API以强大的函数式编程能力革新了集合数据处理方式,但其抽象概念和复杂的链式调用让不少开发者望而却步。为此,JDFrame框架应运而生,通过直观易懂的操作符简化Stream使用,减少代码量并提高效率。
25 3
|
14天前
|
数据可视化 IDE Java
Java8的Stream流太难用了?看看JDFrame带来的革新体验
【8月更文挑战第6天】在Java开发者的日常工作中,Java 8引入的Stream API无疑是一个革命性的特性,它极大地简化了集合(Collection)的处理方式,使得数据操作更加声明式、函数式。然而,对于初学者或是从早期Java版本迁移过来的开发者而言,Stream API的复杂性和抽象性可能会成为一道门槛。今天,我们就来探讨如何通过JDFrame这样的工具或框架,以及掌握一些高效学习策略,让Java Stream的使用变得更加得心应手。
51 5
|
13天前
|
存储 Java API
探索Java中的Stream API: 提升数据处理的效率与优雅
在Java的海洋中,Stream API如同一股清流,为数据处理注入了新的活力。本文将深入探讨Stream API的核心概念、操作以及它如何改变我们编写和理解代码的方式。通过实际案例,我们将揭示这一现代编程范式如何简化集合处理,提高代码的可读性与性能。
|
17天前
|
Java API 数据处理
Java 8新特性:Stream API的实用指南
【8月更文挑战第3天】在Java 8中,最引人注目的新特性之一是Stream API。这个API允许开发者以声明式方式处理数据集合,提供了一种高效且易于理解的数据处理方法。本文将介绍Stream API的基本概念、常用操作以及如何在实际开发中应用。
|
3天前
|
并行计算 Java API