1.我的环境如下:
CPU:I5-2430M 2.4GHz 双核四线程
内存:8G
JDK版本:1.8.0_25
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 Filter1(List<Student> lists)
{
long start = System.currentTimeMillis();
Stream<Student> man1 = lists.stream().filter(
new Predicate<Student>()
{
public boolean test(Student student)
{
return(student.getAge() >= 18);
}
});
long end = System.currentTimeMillis();
System.out.println(end - start);
}
/** lambda测试 */
public static void Filter2(List<Student> lists)
{
long start = System.currentTimeMillis();
Stream<Student> man2 = lists.stream().filter(student -> {return student.getAge() >= 18;});
long end = System.currentTimeMillis();
System.out.println(end - start);
}
public static void main(String[] args)
{
List<Student> lists = DataDao.getStudent(1000000);
System.out.println("数据生成完毕!");
//每次开启一个,保证运行情况尽量一致
//Filter1(lists);
Filter2(lists);
}
4.我的测试结果如下:
从测试结果可以得出,Lambda还是比较耗时的
5.案例存在的问题
每次都是生成数据,每个测试方法数据不完全一样,所以每次运行3次,进行参考
6.结论
Java8有了Lambda之后,确实挺方便的,但是运行效率并没有原来匿名内部类的效率高,所以在要求效率不高,但是代码美观的时候,建议使用Lambda,在要求高效率的时候,可以考虑使用原来匿名内部类,
我相信Java的Lambda语法会越来越完善的,效率也会提高的!
由于我的水平有限,如果有什么问题或者有更好的测试方法,欢迎大家留言!