博客
关于我
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中获取所有表名以及表名带时间字符串使用BetweenAnd筛选区间范围
查看>>
Mysql中视图的使用以及常见运算符的使用示例和优先级
查看>>
Mysql中触发器的使用示例
查看>>
Mysql中设置只允许指定ip能连接访问(可视化工具的方式)
查看>>
mysql中还有窗口函数?这是什么东西?
查看>>
mysql中间件
查看>>
MYSQL中频繁的乱码问题终极解决
查看>>
MySQL为Null会导致5个问题,个个致命!
查看>>
MySQL为什么不建议使用delete删除数据?
查看>>
MySQL主从、环境搭建、主从配制
查看>>
Mysql主从不同步
查看>>
mysql主从同步及清除信息
查看>>
MySQL主从同步相关-主从多久的延迟?
查看>>
mysql主从同步配置方法和原理
查看>>
mysql主从复制 master和slave配置的参数大全
查看>>
MySQL主从复制几个重要的启动选项
查看>>
MySQL主从复制及排错
查看>>
mysql主从复制及故障修复
查看>>
MySQL主从复制的原理和实践操作
查看>>
webpack loader配置全流程详解
查看>>