关于问题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 哪个效率高?】的全部回答,希望能对大家有所帮助,内容收集于网络仅供参考,如要实行请慎重,任何后果与本站无关!