java8 stream和foreach哪个效率高?

java8 stream和foreach哪个效率高?

java8 stream和foreach哪个效率高?

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

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

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

java8 stream和foreach哪个效率高?

2. 测试用例

import java.util.ArrayList;

import java.util.List;

public class ForEachMain {

public static void main(String[] args) {

// 实例化arrayList

List arrayList = new ArrayList();

int num = 15000000;

// 插入10万条数据

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

arrayList.add(i);

}

List 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) + "毫秒");

}

}

java8 stream和foreach哪个效率高?

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毫秒

java8 stream和foreach哪个效率高?

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

php foreach循环获取第一个和最后一个元素,怎么做?

引言

对于数组遍历,使用一个 foreach 几乎就完全够用了。那么你一般在编写代码的时候,怎么判断是循环的第一个元素,和最后一个元素呢?

本文通过几个示例,展示实现此功能的多种方法。

java8 stream和foreach哪个效率高?

学习时间

首先,我们使用最直接,最容易想到的办法,使用一个计数器 $i 用于标记当前的索引位置。如果是第一个,则 $i == 0;如果是最后一个,则 $i 等于数组长度减一。代码如下:

$i = 0; $len = count($array); foreach ($array as $item) { if ($i == 0) { // first } else if ($i == $len - 1) { // last } $i++; }

上述代码实现简单直接,但是写的优点太长了,而且也不美观。有没有更优雅一些的方式呢?

我们试着从PHP数组操作函数上着手,内置函数中提供了 reset,用于将指针指向数组的第一个元素;end 函数,将指针指向数组的最后一个元素。下面的代码,就是这样实现的:

foreach($array as $key => $element) { reset($array); if ($key === key($array)) echo 'FIRST ELEMENT!'; end($array); if ($key === key($array)) echo 'LAST ELEMENT!'; }

函数 key() 用于获取当前数组指针所指向的索引值。

而 foreach 循环内将元素匹配到 $key => $element 两个变量,$key 存储循环所指向的索引位置。

PHP 的数组操作函数为我们提供了思路,那么当然还可以用 prev 函数,返回前一个元素的值;使用 next 函数,获取下一个元素的值。

这两个函数都是在获取不到元素时返回 false。那么代码就可以这样来写了:

foreach( $items as $item ) { if( !prev( $items ) ) { echo 'First Item'; } if( !next( $items ) ) { echo 'Last Item'; } }

写在最后

本文通过三种方式实现了定位 foreach 循环体内,第一个元素和最后一个元素的方法。希望大家熟练使用。

Happy coding :_)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 xxx@163.com 举报,一经查实,本站将立刻删除。

发表评论

登录后才能评论