博客
关于我
java1.8之后的lambda表达式略解
阅读量:401 次
发布时间:2019-03-05

本文共 2523 字,大约阅读时间需要 8 分钟。

lambda其实就是匿名类,只是语法看起来简洁一点。

先提供一个接口,里面定义一个test方法

package lambda; import charactor.Hero; public interface HeroChecker {       public boolean test(Hero h);}

匿名类的实现

package lambda;   import java.util.ArrayList;import java.util.List;import java.util.Random;   import charactor.Hero;   public class TestLambda {       public static void main(String[] args) {           Random r = new Random();        List
heros = new ArrayList
(); for (int i = 0; i < 5; i++) { heros.add(new Hero("hero " + i, r.nextInt(1000), r.nextInt(100))); } System.out.println("初始化后的集合:"); System.out.println(heros); System.out.println("使用匿名类的方式,筛选出 hp>100 && damange<50的英雄"); HeroChecker checker = new HeroChecker() { @Override public boolean test(Hero h) { return (h.hp>100 && h.damage<50); } }; filter(heros,checker); } private static void filter(List
heros,HeroChecker checker) { for (Hero hero : heros) { if(checker.test(hero)) System.out.print(hero); } } }

将上面的filter方法中的HeroChecker checker匿名类改为lambda语法去实现

package lambda; import java.util.ArrayList;import java.util.List;import java.util.Random; import charactor.Hero; public class TestLamdba {       public static void main(String[] args) {           Random r = new Random();        List
heros = new ArrayList
(); for (int i = 0; i < 5; i++) { heros.add(new Hero("hero " + i, r.nextInt(1000), r.nextInt(100))); } System.out.println("初始化后的集合:"); System.out.println(heros); System.out.println("使用Lamdba的方式,筛选出 hp>100 && damange<50的英雄"); filter(heros,h->h.hp>100 && h.damage<50); } private static void filter(List
heros,HeroChecker checker) { for (Hero hero : heros) { if(checker.test(hero)) System.out.print(hero); } } }

这里filter(heros,h->h.hp>100 && h.damage<50);中checker的声明采用了lambda的形式,其实编译器最后还是会转成

HeroChecker checker = new HeroChecker() {
@Override
public boolean test(Hero h) {
return (h.hp>100 && h.damage<50);
}
};
然后再
filter(heros,checker);

只是h->h.hp>100 && h.damage<50这种语法看起来简洁一点

Lambda表达式虽然带来了代码的简洁,但是也有其局限性。

  1. 可读性差,与啰嗦的但是清晰的匿名类代码结构比较起来,Lambda表达式一旦变得比较长,就难以理解
  2. 不便于调试,很难在Lambda表达式中增加调试信息,比如日志
  3. 版本支持,Lambda表达式在JDK8版本中才开始支持,如果系统使用的是以前的版本,考虑系统的稳定性等原因,而不愿意升级,那么就无法使用。

Lambda比较适合用在简短的业务代码中,并不适合用在复杂的系统中,会加大维护成本。

转载地址:http://jfizz.baihongyu.com/

你可能感兴趣的文章
mysql之分组查询GROUP BY,HAVING
查看>>
mysql之分页查询
查看>>
Mysql之备份与恢复
查看>>
mysql之子查询
查看>>
MySQL之字符串函数
查看>>
mysql之常见函数
查看>>
Mysql之性能优化--索引的使用
查看>>
mysql之旅【第一篇】
查看>>
Mysql之索引选择及优化
查看>>
mysql之联合查询UNION
查看>>
mysql之连接查询,多表连接
查看>>
mysql乐观锁总结和实践 - 青葱岁月 - ITeye博客
查看>>
mysql乱码
查看>>
Mysql事务。开启事务、脏读、不可重复读、幻读、隔离级别
查看>>
MySQL事务与锁详解
查看>>
MySQL事务原理以及MVCC详解
查看>>
MySQL事务及其特性与锁机制
查看>>
mysql事务理解
查看>>
MySQL事务详解结合MVCC机制的理解
查看>>
MySQL事务隔离级别:读未提交、读已提交、可重复读和串行
查看>>