网站备案流程图片,官方做任务网站,网页设计教程图片,跑腿app开发目录 前言1. 基本知识2. Demo 前言
事情起因是遍历大数据的时候#xff0c;数据卡顿很严重
对于Java的基本知识推荐阅读#xff1a;java框架 零基础从入门到精通的学习路线 附开源项目面经等#xff08;超全#xff09;
1. 基本知识
在Java中#xff0c;Stream API提供… 目录 前言1. 基本知识2. Demo 前言
事情起因是遍历大数据的时候数据卡顿很严重
对于Java的基本知识推荐阅读java框架 零基础从入门到精通的学习路线 附开源项目面经等超全
1. 基本知识
在Java中Stream API提供了一种功能强大且灵活的方式来处理集合数据
与传统的for循环相比Stream API具有许多优势但也存在一些差异和限制
一、Stream遍历
优势
函数式编程Stream API提供了丰富的函数式编程操作如map、filter、reduce等可以更加清晰和简洁地表达数据处理逻辑并行处理Stream API支持并行处理可以自动利用多核处理器的优势加速数据处理过程延迟执行Stream操作可以延迟执行只有在终止操作调用时才会实际执行这有助于提高性能和资源利用率
劣势
学习曲线相对于传统的for循环Stream API需要一定的学习曲线特别是对于初学者来说性能开销在一些简单的情况下使用Stream API可能会引入一些性能开销特别是对于小规模数据集
应用场合
数据集合操作对集合进行过滤、转换、排序等操作时Stream API可以提供简洁的解决方案。大规模数据处理对于大规模数据集合尤其是需要并行处理的场景Stream API可以发挥其优势。
二、For循环遍历
优势
简单直观for循环是一种传统的迭代方式简单直观易于理解和掌握性能较好在一些简单的场景下for循环可能具有更好的性能尤其是对于小规模数据集合
劣势
可读性较差相比于Stream API使用for循环可能需要更多的代码量并且代码结构可能相对复杂可读性较差并行处理困难对于需要并行处理的场景使用传统的for循环可能需要自行管理线程池等复杂逻辑
通过以上的差异之处主要就是代码美观度以及数据量的大小来选择
影响数据量大小的因素
无论是使用Stream API还是传统的for循环其性能在很大程度上取决于数据集合的大小 一般而言对于小规模数据集合两者的性能差异可能不明显但随着数据量的增加Stream API的优势会更加显著尤其是在并行处理大规模数据集合时但这个不是很绝对
一切优化一定要结合自身的数据量以及对数据量的操作难易在做出选择哪个进行迭代 一切优化一定要结合自身的数据量以及对数据量的操作难易在做出选择哪个进行迭代 一切优化一定要结合自身的数据量以及对数据量的操作难易在做出选择哪个进行迭代
2. Demo
基本知识Demo回顾
import java.util.Arrays;
import java.util.List;public class Main {public static void main(String[] args) {ListInteger numbers Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);// 使用Stream API计算偶数的平方和int sumOfEvenSquaresStream numbers.stream().filter(n - n % 2 0).mapToInt(n - n * n).sum();System.out.println(Sum of squares of even numbers using Stream: sumOfEvenSquaresStream);// 使用传统的for循环计算偶数的平方和int sumOfEvenSquaresForLoop 0;for (int number : numbers) {if (number % 2 0) {sumOfEvenSquaresForLoop number * number;}}System.out.println(Sum of squares of even numbers using for loop: sumOfEvenSquaresForLoop);}
}以上Demo并非是比较差异只是回顾总结毕竟实战场合不一样重点还是要结合自身判断其数据迭代的快慢
观测迭代时间变化的Demo
import java.util.ArrayList;
import java.util.List;public class Main {public static void main(String[] args) {// 创建一个包含大量数据的ListListInteger numbers new ArrayList();for (int i 0; i 1000000; i) {numbers.add(i);}// 使用Stream API进行遍历和计时long startTimeStream System.currentTimeMillis();numbers.stream().forEach(number - {// 在这里可以执行一些操作});long endTimeStream System.currentTimeMillis();long elapsedTimeStream endTimeStream - startTimeStream;System.out.println(Time taken with Stream API: elapsedTimeStream milliseconds);// 使用传统的for循环进行遍历和计时long startTimeForLoop System.currentTimeMillis();for (int number : numbers) {// 在这里可以执行一些操作}long endTimeForLoop System.currentTimeMillis();long elapsedTimeForLoop endTimeForLoop - startTimeForLoop;System.out.println(Time taken with for loop: elapsedTimeForLoop milliseconds);}
}截图如下 通过上面的代码可看出此处的处理过程使用for是比较快的
这也后续验证了我在操作某个数据时转为for来遍历一定要结合自身数据以及操作