Java8新特性效率之stream

1.我的环境如下:

CPU:I5-2430M 2.4GHz 双核四线程

内存:8G

JDK版本:1.8.0_25

由于测试流的时候使用的是Lambda语法,可以时间会多出点

2.生成数据的核心代码

一个Student类,只有一个age属性,一个方法,是根据参数生成一定数量的数据

public static List<Student> getStudent(long count)
{
	List<Student> lists = new ArrayList<>();
	for(long i = 1; i<= count;i++)
		lists.add(new Student((int)(Math.random() * 100)));
	return lists;
}

3.测试代码

分为三种测试方式,普通循环,顺序流遍历,并发流遍历,测试内容很简单,就是进行一下逻辑判断

/** 顺序流测试 */
public static void TestTime1(List<Student> lists)
{
	long start = System.currentTimeMillis();
	lists.stream().forEach(student -> {if(student.getAge() >= 18) ;});
	long end = System.currentTimeMillis();
	System.out.println(end - start);
}
/** 并行流测试 */
public static void TestTime2(List<Student> lists)
{
	long start = System.currentTimeMillis();
	lists.parallelStream().forEach(student -> {if(student.getAge() >= 18) ;});
	long end = System.currentTimeMillis();
	System.out.println(end - start);
}
/** 普通循环测试 */
public static void TestTime3(List<Student> lists)
{
	long start = System.currentTimeMillis();
	for(Student student : lists)//3248
		if(student.getAge() >= 18);
			//System.out.println(student);
	long end = System.currentTimeMillis();
	System.out.println(end - start);
}
public static void main(String[] args)
{
	List<Student> lists = DataDao.getStudent(1000000);
	System.out.println("数据生成完毕!");
	//每次开启一个,保证运行情况尽量一致
	//TestTime1(lists);
	//TestTime2(lists);
	TestTime3(lists);		
}

4.我的测试结果如下:

Java8新特性效率之stream

从测试结果可以得出,普通循环耗时最少

5.案例存在的问题

1.每次都是生成数据,每个测试方法数据不完全一样,所以每次运行3次,进行参考

2.单机及CPU的问题并不能真正发挥出并发流的特性

6.结论

Java8有了stream流之后,确实挺方便的,但是运行效率并没有原生的循环高,尤其数据量不是很大的情况下,所以不是开发数据挖掘的,在单机开发的项目,可以考虑使用原生循环

由于我的水平有限,如果有什么问题或者有更好的测试方法,欢迎大家留言!




你可能感兴趣的:(效率,Stream,java8)