zoukankan      html  css  js  c++  java
  • Java8之Lambda

    这是学习Java8 新特性之一 Lambda 公式时所做的笔记,尝试从它的意义、作用、使用、不足四个方面进行解析,未尽之处请多包涵。

    意义

    Lambda表达式的意义:

    对程序员来说最直观的感受就是用Lambda表达式可以简化很多代码。使用它可以很轻松的将很多行代码缩减成一行。

    而更大的意义是,Lambda表达式对java性能的提升[1]

    作用

    需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数。

    如果你仔细观察自己的代码,会发现这种场景其实很常见:你在某处就真的只需要一个能做一件事情的函数而已,连它叫什么名字都无关紧要。Lambda 表达式就可以用来做这件事。

     

    使用

    1.推导[3]

    Lambda表达式可以看成是匿名类一点点演变过来,以下例子方法内容不要纠结,主要看形式是如何变化。

    1. 匿名类的正常写法

     

    HeroCheckerc1 = new HeroChecker() {

        public boolean test(Hero h) {

            return (h.hp>100 &&h.damage<50);

        }

    };

     

     

    2. 把外面的壳子去掉

    只保留方法参数和方法体

    参数和方法体之间加上符号 ->

     

    HeroCheckerc2 = (Hero h) ->{

             return h.hp>100 &&h.damage<50;

    };

     

     

     

    3. 把return和{}去掉

     

    HeroCheckerc3 = (Hero h) ->h.hp>100 && h.damage<50;

     

     

    4. 把 参数类型和圆括号去掉(只有一个参数的时候,才可以去掉圆括号)

     

    HeroCheckerc4 = h ->h.hp>100 && h.damage<50;

     

     

    5. 把c4作为参数传递进去

     

    filter(heros,c4);

     

     

    6. 直接把表达式传递进去

     

    filter(heros,h -> h.hp > 100 && h.damage < 50);

     

    PS:与匿名类 概念相比较,Lambda 其实就是匿名方法,这是一种把方法作为参数进行传递的编程思想。

     

    2.具体使用[3]

    1.方法引用

             1: 引用静态方法   

    2 : 引用对象方法   

    3 : 引用容器中的对象的方法   

    4 : 引用构造器   

    2.聚合操作

    聚合操作方式遍历数据

    PS:由于牵涉到Stream和管道的概念,在此不详细展开[4]

    不足[3]

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

    1. 可读性差,与啰嗦的但是清晰的匿名类代码结构比较起来,Lambda表达式一旦变得比较长,就难以理解

    2. 不便于调试,很难在Lambda表达式中增加调试信息,比如日志

    3. 版本支持,Lambda表达式在JDK8版本中才开始支持,如果系统使用的是以前的版本,考虑系统的稳定性等原因,而不愿意升级,那么就无法使用。

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

     

     

    参考网页:

    [1] http://www.jianshu.com/p/f02b04344365Lambda表达式的意义

    [2] https://www.zhihu.com/question/20125256  Lambda 表达式有何用处?如何使用?

    [3] http://how2j.cn/k/lambda/lambda-lamdba-tutorials/697.htmlJAVA 中级 / LAMBDA / JAVA LAMBDA 表达式教程

    [4] http://how2j.cn/k/lambda/lambda-stream/700.htmlJAVA 中级 / LAMBDA / JAVA 集合的聚合操作

     

    时间:2017年5月24日22:28:01

  • 相关阅读:
    JN_0041:在新版的edge浏览器中 将 url 地址 设置为应用,并在桌面上显示快捷方式
    H50074:base标签 指定资源地址
    MayaLearn0004: 层 大纲视图 特殊复制
    MayaLearn0003: 工具架 快捷菜单 枢轴 对齐
    MayaLearn0000: 快捷键命令
    MayaLearn0002: 软件基本操作工具 基本物体的创建 工作区菜单
    MayaLearn0001: 初识maya
    Ajax0006: ajax 读取 本地 js 配置文件
    JN_0040:如何下载视频流视频文件
    H50073:div 循环添加点击事件,swiper循环添加点击事件
  • 原文地址:https://www.cnblogs.com/Sherlock-J/p/12926012.html
Copyright © 2011-2022 走看看