当前位置:   article > 正文

jdk1.8 lambda表达式性能分析_动态创建entities.stream().filter()条件

动态创建entities.stream().filter()条件

jdk1.7加入invokeDynamic指令来支持动态类型。详见https://book.2cto.com/201301/14120.html

jdk1.8加入lambda表达式,实际使用invokeDynamic指令来实现。

 

1 lambda表达式的应用

java的语法出了名的繁杂冗余,使用lambda表达式,代码更简洁,比如集合处理。

 
  1. //元素过滤
  2. List<Entity> filter = entities.stream().filter((e)->{return e.a==0;}).collect(Collectors.toList());
  3. //字段抽取
  4. List<Integer> field = entities.stream().map((e)->{return e.a;}).collect(Collectors.toList());
  5. //list转map
  6. Map<Integer, Entity> map = entities.stream().collect(Collectors.toMap(Entity::getA, e->e));
  7. //map迭代
  8. map.forEach((k,v)->{});
  9. //list迭代
  10. entities.forEach((e)->{});

2 lambda表达式的性能

可以猜想,由于使用invokeDynamic指令,类和方法需要在运行时才解析,比传统的方法调用应该会慢一些,实验一下。

 
  1. public boolean converter(){
  2. int count = 10000;
  3. Converter<Integer> converter = (inte)->{
  4. System.out.println(inte);
  5. };
  6. long startTime = System.currentTimeMillis();
  7. for(int i=0;i<count;i++){
  8. converter.convert(i);
  9. }
  10. long lambdaCost = System.currentTimeMillis()-startTime;
  11. Converter<Integer> converterOld = new Converter<Integer>(){
  12. @Override
  13. public void convert(Integer t) {
  14. System.out.println(t);
  15. }
  16. };
  17. startTime = System.currentTimeMillis();
  18. for(int i=0;i<count;i++){
  19. converterOld.convert(i);
  20. }
  21. long normalCost = System.currentTimeMillis()-startTime;
  22. return normalCost>lambdaCost;
  23. }
  24. public static void main(String[] args) {
  25. int normalWin = 0;
  26. int total = 10;
  27. Lambda lambda =  new Lambda();
  28. for(int i=1;i<=total;i++){
  29. if(lambda.converter()){
  30. normalWin++;
  31. }
  32. }
  33. System.out.println("total:"+total+",normal win:"+normalWin);
  34. }
 
  1. total:10,normal win:3
  2. total:10,normal win:5
  3. total:10,normal win:4
  4. total:10,normal win:6
  5. total:10,normal win:7

 

结果显示,使用lambda表达式运行并不比常规调用慢,不相上下,jdk1.8确实给力。

 

此种神器,当多多使用了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/790030
推荐阅读
相关标签
  

闽ICP备14008679号