• 生活小妙招免费各类生活中的小问题知识以及音乐简谱等,是你了解世界未知知识的好地方。

java8 stream和foreach哪个效率高?

十万个为什么 空空 2024-3-16 06:06:36 2次浏览

关于问题java8 stream 和 foreach 哪个效率高?一共有 2 位热心网友为你解答:

【1】、来自网友【每日搞心态】的最佳回答:

Java 8 引入的 Stream 和 forEach 方法都是用于处理集合数据的工具。它们有不同的使用方式和适用场景,而效率的比较往往取决于具体的使用情况。

Stream 是一种用于处理集合数据的函数式编程方式。它提供了丰富的操作方法,可以进行过滤、映射、排序、聚合等操作。Stream 使用惰性求值的方式,在遇到终端操作时才会执行计算,这有助于优化性能并提高效率。通过合理地使用 Stream 的操作方法,可以利用多核处理能力进行并行处理,提升处理速度。

forEach 是 Stream 的一个终端操作方法,用于遍历集合并执行指定的操作。它通常用于执行简单的操作或副作用,例如打印元素或修改元素状态。forEach 方法的执行效率相对较高,因为它直接遍历元素并执行操作,不涉及额外的中间操作。

总的来说,Stream 提供了更丰富的操作方法和并行处理能力,适用于复杂的数据处理场景。而 forEach 方法则适用于简单的遍历和操作需求。在性能上,由于涉及到具体的使用情况和数据规模,无法一概而论哪个更高效。因此,在选择使用 Stream 还是 forEach 时,需要根据具体的业务需求和性能要求进行权衡和测试。

【2】、来自网友【夕阳雨晴】的最佳回答:

1. 问题描述

java8 stream 和 foreach 哪个效率高?

问题结论

150W 条数据以上:stream>paralleStream>simple

150W 条数据以下:simple>stream>paralleStream

从性能上考虑:小数据量用普通的 forEach 就可以,没有必要使用 java8 中的新出来的几种,已经在项目中使用的也不需要改回来,10W 条也就几毫秒的差距。

2. 测试用例

import java.util.ArrayList;

import java.util.List;

public class ForEachMain {

public static void main(String[] args) {

// 实例化 arrayList

List<Integer> arrayList = new ArrayList<Integer>();

int num = 15000000;

// 插入 10 万条数据

for (int i = 0; i < num; i++) {

arrayList.add(i);

}

List<Integer> res = new ArrayList<>();

res.clear();

// 用 foreach 循环 arrayList

long arrayForeachStartTime = System.currentTimeMillis();

for (Integer in : arrayList) {

res.add(in);

}

long arrayForeachEndTime = System.currentTimeMillis();

System.out.println(

“用 foreach 循环 arrayList ” + (num) + “次花费时间:” + (arrayForeachEndTime – arrayForeachStartTime) + “毫秒”);

res.clear();

// 用 stream-foreach 循环 arrayList

long arrayStreamStartTime = System.currentTimeMillis();

arrayList.stream().forEach(e -> res.add(e));

long arrayStreamEndTime = System.currentTimeMillis();

System.out.println(

“用 Stream-foreach 循环 arrayList ” + (num) + “次花费时间:” + (arrayStreamEndTime – arrayStreamStartTime) + “毫秒”);

res.clear();

// 用 parallelStream-foreach 循环 arrayList

long arrayParallelStreamStartTime = System.currentTimeMillis();

arrayList.parallelStream().forEach(e -> res.add(e));

long arrayParallelStreamEndTime = System.currentTimeMillis();

System.out.println(“用 parallelStream-foreach 循环 arrayList ” + (num) + “万次花费时间:”

+ (arrayParallelStreamEndTime – arrayParallelStreamStartTime) + “毫秒”);

}

}

2.1 当 num = 50000000 时

用 foreach 循环 arrayList 5000 万次花费时间:2840 毫秒

用 stream-foreach 循环 arrayList 5000 万次花费时间:507 毫秒

用 parallelStream-foreach 循环 arrayList 5000 万次花费时间:1168 毫秒

2.2 当 num = 500000 时

用 foreach 循环 arrayList 50 万次花费时间:13 毫秒

用 stream-foreach 循环 arrayList 50 万次花费时间:25 毫秒

用 parallelStream-foreach 循环 arrayList 50 万次花费时间:35 毫秒

2.3 当 num = 5000 时

用 foreach 循环 arrayList 5000 次花费时间:1 毫秒

用 stream-foreach 循环 arrayList 0 万次花费时间:16 毫秒

用 parallelStream-foreach 循环 arrayList 0 万次花费时间:8 毫秒

最直观的感觉,stream 的流式处理应该比较快,这种想当然的推测,需要事实去佐证,运行过测试代码之后,发现并不是那么回事。耳听为虚,眼见为实,李子是不是涩的,最简单的方式是尝一口。请记住,编写代码时,一定要以最简洁为原则,毕竟运行程序的硬件成本会随着时间的推移在不断降低。

作者:夕阳雨晴,欢迎关注我的头条号:偶尔美文,主流 Java,为你讲述不一样的码农生活。

以上就是关于问题【java8 stream 和 foreach 哪个效率高?】的全部回答,希望能对大家有所帮助,内容收集于网络仅供参考,如要实行请慎重,任何后果与本站无关!

喜欢 (0)