Lambdas运行效率
来源:互联网 发布:如何发淘宝链接给朋友 编辑:程序博客网 时间:2024/06/05 06:16
学习Java8的Lambdas的Stream,确实感觉代码简洁和流畅了许多,可是仔细对比了运算的效率,也大大打了折扣。
现举两个例子,一个是千万级别的求和运算;一个是根据勾股定律,计算两个斜边边长在1-100整数范围内的三个边长的组合。
public class EfficiencyComparation { public static void main(String[] args) { t1();//t2(); }//千万整数求和计算private static void t1() { List<Integer> nums1 = new ArrayList<>(); for (int i = 0; i < 10000000; i++) { nums1.add(i); }//Stream的顺行计算 long t1 = System.currentTimeMillis(); long sum = nums1.stream().reduce(0, Integer::sum); long t2 = System.currentTimeMillis(); System.out.println("Elapsed time=" + (t2 - t1));//181ms//Stream的并行计算 t1 = System.currentTimeMillis(); sum = nums1.parallelStream().reduce(0, Integer::sum); t2 = System.currentTimeMillis(); System.out.println("Elapsed time=" + (t2 - t1));//71ms//简单的计算 t1 = System.currentTimeMillis(); sum = 0; for (int i : nums1) { sum += i; } t2 = System.currentTimeMillis(); System.out.println("Elapsed time=" + (t2 - t1));//14ms }//计算范围1-100内的符合勾股定理的组合private static void t2() { long t1, t2;//Stream计算方法1:先filter再mapToObj t1= System.currentTimeMillis();IntStream.rangeClosed(1, 100).boxed().flatMap(a ->IntStream.rangeClosed(a, 100).filter(b -> Math.sqrt(a * a + b * b) % 1 == 0).mapToObj(b ->new int[]{a, b, (int) Math.sqrt(a * a + b * b)}))//.limit(10).forEach(a-> System.out.println(a[0]+", "+a[1]+", "+a[2])); t2 = System.currentTimeMillis(); System.out.println("耗时="+(t2-t1));//105ms //Stream计算方法2:先mapToObj再filter t1= System.currentTimeMillis(); IntStream.rangeClosed(1, 100).boxed() .flatMap(a -> IntStream.rangeClosed(a, 100) .mapToObj(b -> new double[]{a, b, Math.sqrt(a * a + b * b)}) .filter(b -> b[2] % 1 == 0) ) //.limit(10) .forEach(a-> System.out.println(a[0]+", "+a[1]+", "+a[2])); t2 = System.currentTimeMillis(); System.out.println("耗时="+(t2-t1));//14ms //普通的计算 t1= System.currentTimeMillis(); int[] arr1=new int[100]; int[] arr2=new int[100]; for (int i = 0; i < arr1.length; i++) { arr1[i]=i; arr2[i]=i; } double k; for (int i = 1; i < arr1.length; i++) { for (int j = i; j < arr2.length; j++) { k=Math.sqrt(i*i+j*j); if(k%1==0) System.out.println(i+", "+j+", "+(int)k); } } t2 = System.currentTimeMillis(); System.out.println("耗时="+(t2-t1));//3ms }}
所以,有了Stream,也不是所有地方都要去使用,每种方法都有自己的适用范围,综合起来才能发挥最大的效益。
另外,Eclipse原来是作为测试的IDE,现在发现IntelliJ IDEA也可以为Java、Kotlin提供全面的编程学习和测试,对于使用Android Studio的程序员非常方便,快捷键等都一致,提高的效率。下载地址:
https://www.jetbrains.com/idea/download/
阅读全文
0 0
- Lambdas运行效率
- 浅谈 .net 运行效率
- 提高ABAP运行效率
- ABAP程序运行效率
- GRID 运行效率问题
- 测试程序运行效率
- 提高listview运行效率
- Lua语言运行效率
- 程序运行效率
- 提高matlab运行效率
- 游戏运行效率
- 代码运行效率优化
- 提升php运行效率
- 让我们重视程序运行效率
- 优化VMWare 的运行效率
- Android的运行效率问题
- 提高了计算机运行效率
- 提高程序的运行效率
- 深入理解Java的动态代理
- java 简易聊天工具(TCP)
- PC、手机web页面直播hls视频
- centos6.5下安装redis
- Spring Boot教程
- Lambdas运行效率
- Log4j2官方文档翻译、学习笔记之三——Layouts的分类及常用类型示例
- nginx+tomcat+redis
- 一致性哈希算法学习及JAVA代码实现分析
- CCF考试-相邻对数(201409-1)
- pycharm实践操作(一)
- 辨析指针数组 数组指针 函数指针 函数指针数组 指向函数指针数组的指针
- leetcode: 59. Spiral Matrix II
- hdoj 2036 改革春风吹满地