JDK8的新特性 —— LambdaExpress

1 篇文章 0 订阅


前言

LambdaExpress 是JDK8 加进去的,到目前为止各大厂都在广泛使用,它有着很强的优势:速度更快;代码更少;强大的流式API;便于并行。


一、LambdaExpress 是什么?

  • 基本概念
    1. 本质上它是一个匿名方法,即没有函数名的函数。
    2. 它是基于数学中的λ演算得名。
    3. 它的核心思想是将面向对象中的传递数据变成传递行为。
    4. 它可以表示闭包(此处要和数学传统意义上的闭包进行区分)。
  • 规则
    1. 一定得是函数式接口。
    2. 接口中只能有一个方法。

二、使用方法

1.使用口诀

  • 拷贝小括号
  • 写死右箭头
  • 落地大括号

2.代码实例

1) 无返回值,无参数:

接口:Person

package com.juc.study.iServer;
/**
 * 接口 —— 人
 */
public interface Person {

    /**
     * 只有这一个说的方法
     */
    public void say();
}

测试代码:

import com.juc.study.iServer.Person;
import org.junit.Test;

public class TestJucStudy {

    @Test
    public void testLambdaExpress() {
        Person p = () -> {System.out.println("你好!!!");};
        p.say();
    }
}

执行结果:

你好!!!

2) 有参、有返回值

接口:Person

package com.juc.study.iServer;

/**
 * 接口 —— 人
 */
public interface Person {

    /**
     * 两个学科的总成绩
     * @param i
     * @param y
     * @return
     */
    public int totalScore(int i, int y);
}

测试代码:

import com.juc.study.iServer.Person;
import org.junit.Test;

public class TestJucStudy {
    @Test
    public void testLambdaExpress() {
        Person p = (int x, int y) -> {return x + y;};
        System.out.println(p.totalScore(90, 99));
    }
}

执行结果:

189

3、如何确保接口是函数式接口

  • 在接口上添加注解 @FunctionalInterface 。
  • 如果接口中只有一个方法,JDK8 会在此接口上自动加上@FunctionalInterface ,俗称隐式定义。
  • 如果接口中的方法超过一个,那JDK8就会认为它是一个普通的标准接口。
  • 如果想强制让其成为函数式接口,就可以在接口上添加@FunctionalInterface 注解,当接口中添加了多个方法时就会报错。
  • JDK8里允许有一部分方法的实现,代码如下:

接口: Person

package com.juc.study.iServer;

/**
 * 接口 —— 人
 */
@FunctionalInterface
public interface Person {

    /**
     * 两个学科的总成绩
     * @param i
     * @param y
     * @return
     */
    public int totalScore(int i, int y);

    /**
     * 使用default关键字可以在接口中实现方法,也不会影响函数式接口的定义
     */
    public default void say() {
        System.out.println("Hello JAVA 8");
    }
    
	/**
     * 静态方法
     */
    public static void attr() {
        System.out.println("基本属性");
    }
}

测试代码:

import com.juc.study.iServer.Person;
import org.junit.Test;

public class TestJucStudy {

    @Test
    public void testLambdaExpress() {
        Person p = (int x, int y) -> {return x + y;};
        System.out.println(p.totalScore(90, 99));
        p.say();
        Person.attr();
    }
}

执行结果:

189
Hello JAVA 8
基本属性

使用default关键字可以在接口中实现方法,也不会影响函数式接口的定义,并且可以有多个; 也可以定义多个static 方法 。


三、总结

以上内容就是Lambda表达式的基本知识和用法,有兴趣的同学可以继续深入研究。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yezhijing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值