本文共 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(); Listheros = 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); } } }
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(); Listheros = 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表达式虽然带来了代码的简洁,但是也有其局限性。
- 可读性差,与啰嗦的但是清晰的匿名类代码结构比较起来,Lambda表达式一旦变得比较长,就难以理解
- 不便于调试,很难在Lambda表达式中增加调试信息,比如日志
- 版本支持,Lambda表达式在JDK8版本中才开始支持,如果系统使用的是以前的版本,考虑系统的稳定性等原因,而不愿意升级,那么就无法使用。
Lambda比较适合用在简短的业务代码中,并不适合用在复杂的系统中,会加大维护成本。
转载地址:http://jfizz.baihongyu.com/