Java8新特性——Lambda表达式

Java8新特性——Lambda表达式

1 Lambda表达式简介

  • λ是希腊字母表中的第11个字母,英文名叫Lambda
  • Lambda表达式的出现是为了避免匿名内部类定义过多
  • 其实质是函数式编程

2 Lambda表达式作用

  • 避免匿名内部类定义过多
  • 简化代码
  • 去掉无意义代码,留下核心逻辑

3 函数式接口的定义

理解Functional interface(函数式接口)是学习Java8 Lambda表达式的关键所在。

  • 任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口。示例如下

    public interface Runnable{
        public abstract void run();
    }
    
  • 对于函数式接口,我们可以通过Lambda表达式来创建该接口对象

4 接口实现方式的演化

接口的实现有很多方式,以下从上到下逐步简化,到Lambda表达式,简化到只需2行代码。

/**
 * 推导Lambda表达式
 */
//1.定义一个函数式接口
interface ILike{
    void lambda();
}

//2.实现类
class Like implements ILike {
    @Override
    public void lambda() {
        System.out.println("I like lambda. --> 1");
    }
}

public class TestLambda1 {
    //3.静态内部类简化接口的实现
    static class Like2 implements ILike{
        @Override
        public void lambda() {
            System.out.println("I like lambda. --> 2");
        }
    }
    public static void main(String[] args) {
        ILike like = new Like();
        like.lambda();

        like = new Like2();
        like.lambda();

        //4.局部内部类简化接口的实现
        class Like3 implements ILike {
            @Override
            public void lambda() {
                System.out.println("I like lambda. --> 3");
            }
        }

        like = new Like3();
        like.lambda();

        //5.匿名内部类简化接口的实现
        like = new ILike() {
            @Override
            public void lambda() {
                System.out.println("I like lambda. --> 4");
            }
        };
        like.lambda();

        //6.Lambda表达式简化接口的实现
        like = () -> System.out.println("I like lambda. --> 5");
        like.lambda();
    }
}

5 Lambda表达式的用法

这个就通过一段代码来演示

/**
 * 带参数的接口
 */
public class TestLambda2 {
    public static void main(String[] args) {
        ILove love = (name) -> {
            System.out.println("I love " + name);
        };

        //简化括号(仅适用于单个参数)
        love = name -> {
            System.out.println("I love " + name);
        };

        //简化大括号(仅适用于单个方法或表达式)
        love = name -> System.out.println("I love " + name);

        //调用
        love.showLove("Lucy");

        //多个参数(若有返回值类型,可做表达式计算)
        ILove2 love2 = (from,to) -> System.out.println(from + " love " + to);
        love2.showLove("Lucy","Jack");

        //表达式计算(要求函数式接口有返回值类型)
        ILove3 love3 = (from,to) -> from + to;
        System.out.println(love3.showLove("Lucy","Jack"));
    }
}

interface ILove{
    void showLove(String name);
}

interface ILove2 {
    void showLove(String from,String to);
}

interface ILove3 {
    String showLove(String from,String to);
}

总结:

  1. Lambda表达式使用的前提是:接口为函数式接口(接口内只有一个方法)
  2. Lambda表达式语法:(param1,param2,...) -> {Statement1;Statement2;...}
    • ()内为接口中方法的参数(可带上声明的参数类型),按顺序传参。
    • {}中为需要执行的语句、方法或表达式。
  3. 若接口中方法只有一个参数,则()可省略,否则不能省略
  4. {}中只有一条语句、方法或表达式,则{}可省略,否则不可省略
  5. 接口中方法有返回值时,才可直接写表达式。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值