• Lambda表达式的简单使用


    个人看法:

            lambda表达式在《Java8实战》中想表达的是行为参数化,即从参数传递代码,但实际上还是传递的对象,从感官上来说确实是直接传递的代码,代码更加直观了,毕竟很多人不想因为一行有效代码,去编写一个类,尽管可以使用匿名内部类,但是匿名内部类可以更加简洁,那就是lambda表达式。

            lambda表达式可以粗略看做匿名内部类的语法糖,为了让编码更简洁、直观,由于它简洁到方法名、返回值类型、参数类型都可以没有的语法特点,所以需要一个接口来提供上下文的推断,满足Java能真的认识这串代码入参类型和返回值类型,可结合模板方法模式精简一些重复的“环绕代码”,官方已定义了常用的接口,这些常用的接口成了stream流中重要的承载lambda表达式代码的载体,总之stream流操作是高效代码必不可少的一块,而为此学习简洁的lambda表达式也是有必要的。

            一个只含有一个抽象方法的接口,称之为函数式接口,只含有一个抽象方法,不代表不能有其他的非抽象方法,在jdk8中已经可以给接口添加多个静态和默认方法。

      

      一个测试类,含有一个test000方法,和test111方法

     

          结果

     

    可以看出,lambda表达式从观感上能直接让我们看到有效代码,确实是很简洁。

     有的人说:"这里使用了模板方法模式,完全可以不用这个模式,直接就写死就行,同样能出结果,连接口都不用,很省。“

    就像这样

    确实,但是这个例子是很简单的,如果有很多个这样的就只有判断条件不同的方法,那写死不就要复制粘贴很多个方法了吗,而且复制粘贴多少不太安全。

    再者说,lambda表达式单独并不强大,主要是stream很强大,它其中的很多方法就是模板方法,我们只需要提供lambda表达式就可以使用,不使用stream,不太恰当的相当于别人用SpringBoot开发,而你用SSM写,而lambda就充当的是SpringBoot的application.yml,可以进行简洁的配置,不再需要那么多的SSM中需要的xml配置文件,因为SpringBoot帮你做好了一些事情。

    一个含有一个抽象方法的接口,该抽象方法接受两个参数

    测试类添加test333方法

     

    分别调用两个方法

     

     可以看出

      1、对于一个参数的抽象方法,lambda表达式可以不写括号,而对于两个参数的,则需要括号

      2、无论参数有几个,都可以不写类型

      3、如果方法体只有一条语句,可以不加大括号,它会自动将该条语句结果返回,多于一条,则需要加大括号且加;和return

    特别的,System.out::println这样的写法也是可以的,静态方法可以直接使用,或者当前流有对象的引用,则可对该对象使用其类的这种写法

    比如有个对象Apple a,则a -> a.getWeight()  等效于 Apple::getWeight

  • 相关阅读:
    python json模块 pickli模块
    python sys模块
    python os模块
    python random模块使用
    react项目搭建
    PHP开发环境及搭建
    Vue2之页面 、js 、css分离
    Component template should contain exactly one root element. If you are using v-if on multiple elements, use v-else-if to chain them instead.
    Uncaught Error: Bootstrap's JavaScript requires jQuery
    Mongoose: mpromise (mongoose's default promise library) is deprecated, plug in your own promise library instead: http://mongoosejs.com/docs/promises.html
  • 原文地址:https://www.cnblogs.com/darkclouds/p/12076489.html
Copyright © 2020-2023  润新知