大话lambda表达式

简介: 大话lambda表达式LAMBDA表达式Lambda是一个表达式,也可以说它是一个匿名函数。然而在使用它或是阅读Lambda代码的时候,却显得并不那么容易。因为它匿名,因为它删减了一些必要的说明信息(比如方法名)。

大话lambda表达式

LAMBDA表达式
Lambda是一个表达式,也可以说它是一个匿名函数。
然而在使用它或是阅读Lambda代码的时候,却显得并不那么容易。
因为它匿名,因为它删减了一些必要的说明信息(比如方法名)。
我的理解里,lambda表达式就是一块代码段。这段代码段不需要定义一个名称,所以称之为匿名表达式。

基础用法
package com.taobao.java8;

/**

  • Created by jianghuiwen on 2018/6/7.
  • 函数式接口
    */

@FunctionalInterface
public interface IShow {

void dosome();

}
先定义一个函数式接口,即只有一个方法的接口。上述的定义的接口的实现,就可以用一个lambda表达式来实现。

lambda表达式是对接口的一种简单实现
@Test

public void test1(){

    /**
     * 匿名内部类的写法,即在使用的地方,定义接口的实现
     */
    IShow ishow = new IShow() {
        @Override
        public void dosome() {
            System.out.println("hi");
        }
    };

    ishow.dosome();
}

上述是接口的一种复杂实现方式,可以看到不管多简单的一个接口,都要new一个完整的实现方式。而采用lambda表达式,则可以用非常简单的代码块来实现。

@Test

public void test1(){

    /**
     * lambda表达式方式实现
     */
    IShow ishow = ()-> System.out.println("hi");
    ishow.dosome();
}

可以看到,令码农们惊叹的地方来了,居然能如此简单,如此让人痴迷,可以这么高效精简的写出代码块来。
当然,不仅仅停止于此,还有更为精简的一些写法。
在很多业务场景,我们想使用一段代码块来实现某个功能,例如前置校验,我们会先定义一个接口,然后定义一个实现体,然后在实现体里实现具体的业务逻辑。
但是,我们关注这个接口的定义嘛?其实我们不关注,我们只关注实现体里的如何完成业务逻辑即可,因此定义一个接口并完成实现这个操作实在是太多余了,因此有了一下的优化方案。
如上所示,我们要先定义一个接口,然后把匿名表达式赋值给一个接口,最后调用这个接口。每次都定义一个接口很麻烦,java8里提供了几个默认的接口。比如,consumer。该接口接收一个参数,返回空值。

@Test

public void test1(){

    /**
     * lambda表达式方式实现
     */
    Consumer ishow = (a)-> System.out.println("hi "+a);
    ishow.accept("jianghuiwen");
}

这样,我们就不用自己定义一个IShow接口了!非常牛逼了。 但是,每次还是有一个麻烦,即,我还是要把lambda表达式赋值给Consumer ishow。所以,在Java自定义的一些方法里,默认直接接收这种类型的表达式,省去了重新定义一下。下面看一个筛选列表值里大于50的值的方法。

@Test

public void test1(){

    List<Integer> list = Arrays.asList(23,45,56,676,32,323,43,43);
    //list的forEach方法接收一个lambda表达式
    list.forEach(item->{
        if(item>50){
            System.out.println(item);
        }
    });
}

从这里可以学习到几个非常重要的点,第一个就是lambda表达式可以用来对接口进行实现,降低每次实现一个接口的编码成本。第二个就是可以采用系统内置的几个接口完成更简单的业务逻辑实现。最后就是在自己定义类时,可以预置一些函数式接口用于提高编码效率。

目录
相关文章
|
6月前
|
算法 编译器 C++
C++一分钟之—Lambda表达式初探
【6月更文挑战第22天】C++的Lambda表达式是匿名函数的快捷方式,增强函数式编程能力。基本语法:`[capture](params) -&gt; ret_type { body }`。例如,简单的加法lambda:`[](int a, int b) { return a + b; }`。Lambda可用于捕获外部变量(值/引用),作为函数参数,如在`std::sort`中定制比较。注意点包括正确使用捕获列表、`mutable`关键字和返回类型推导。通过实践和理解这些概念,可以写出更简洁高效的C++代码。
56 13
|
7月前
|
Java 编译器
Lambda表达式
Lambda表达式
36 0
|
7月前
|
Java
lambda表达式详解
lambda表达式详解
|
7月前
|
并行计算 Java 编译器
Lambda表达式超详解
Lambda表达式超详解
|
7月前
|
算法 编译器
C++11(lambda表达式)
C++11(lambda表达式)
66 0
|
算法 编译器
C++11 lambda表达式(下)
C++11 lambda表达式(下)
96 2
|
算法 搜索推荐 编译器
C++11:lambda表达式
C++11:lambda表达式
45 0
|
编译器 C++
C++中Lambda表达式
C++中Lambda表达式
103 0
|
Java
Lambda表达式的实际情况和应用
Lambda表达式是Java 8引入的一个重要特性,它提供了一种简洁而强大的方式来表示匿名函数。Lambda表达式可以用于各种情况和应用,包括但不限于以下几个方面:
80 0
|
存储 算法 编译器
lambda表达式的介绍
lambda表达式的介绍
117 0