前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >十七、Java8新特性——Lambda表达式【黑马JavaSE笔记】

十七、Java8新特性——Lambda表达式【黑马JavaSE笔记】

作者头像
啵啵鱼
发布2022-11-23 17:47:35
2260
发布2022-11-23 17:47:35
举报
文章被收录于专栏:Java一条龙学习笔记系列

文章目录

Lambda表达式

(一)体验Lambda表达式

需求:启动一个线程,在控制台输出一句话:多线程启动了

代码演示:

代码语言:javascript
复制
public class LambdaDemo {
    public static void main(String[] args) {
        //匿名内部类改进
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("多线程程序启动了");
            }
        }).start();

        //lambda表达式改进
        new Thread(() -> {
            System.out.println("多线程程序启动了");
        }).start();
    }
}

(二)lambda表达式的标准格式


(三)Lambda表达式的练习

Lambda表达式的使用前提

  • 有一个接口
  • 接口中有且仅有一个抽象方法
练习一:抽象方法无参无返回值
  • 定义一个接口(Eatable),里面定义一个抽象方法:void eat();
  • 定义一个测试类(EatableDemo),在测试类中提供两个方法
  • 一个方法是:useEatable(Eatable e)
  • 一个方法是主方法,在主方法中调用useEatable方法

代码实现:

定义一个接口(Eatable)

代码语言:javascript
复制
package TEMP.TEMP30;

public interface Eatable {
    void eat();
}

定义接口的实现类:

代码语言:javascript
复制
public class EatableImpl implements Eatable {
    @Override
    public void eat() {
        System.out.println("吃苹果");
    }
}

定义测试类:

代码语言:javascript
复制
public class EatableDemo {
    public static void main(String[] args) {
        //在主方法中调用useEatable()方法
        Eatable e = new EatableImpl();
        useEatable(e);

        //匿名内部类改进
        useEatable(new Eatable() {
            @Override
            public void eat() {
                System.out.println("吃苹果");
            }
        });

        //lambda表达式改进
        useEatable(() -> {
            System.out.println("吃苹果");
        });
    }

    private static void useEatable(Eatable e) {
        e.eat();
    }
}

练习二:抽象方法带参无返回值

定义接口:

代码语言:javascript
复制
public interface Flyable {
    void fly(String s);
}

定义接口实现类:

代码语言:javascript
复制
public class FlyableImpl implements Flyable {
    @Override
    public void fly(String s) {
        System.out.println(s + "飞起来了");
    }
}

定义测试类:

代码语言:javascript
复制
public class FlyableDemo {
    public static void main(String[] args) {
        //调用useFlyable方法
        Flyable f = new FlyableImpl();
        useFlyable(f, "狗");

        //匿名内部类
        useFlyable(new Flyable() {
            @Override
            public void fly(String s) {
                System.out.println(s + "飞起来了");
            }
        }, "猫");

        //lambda表达式改进
        useFlyable((String s) -> {
            System.out.println(s + "飞起来了");
        }, "鱼");
    }

    private static void useFlyable(Flyable f, String s) {
        f.fly(s);
    }
}

练习三:抽象方法带参带返回值

定义接口:

代码语言:javascript
复制
public interface Addable {
    int add(int x,int y);
}

定义测试类:

代码语言:javascript
复制
public class AddableDemo {
    public static void main(String[] args) {
        //lambda方法
        useAddable((int x, int y) -> {
           return x + y;
        });
    }

    private static void useAddable(Addable a) {
        int sum = a.add(10, 20);
        System.out.println(sum);
    }
}

(四)Lambda表达式的省略模式

省略规则:

  • 参数类型可以省略,但有多个参数的情况下不能只省略一个
  • 如果参数有且仅有一个,那么可以省略小括号
  • 如果代码块的语句只有一条,可以省略大括号和分号,如果这一条语句有return,想要省略的话return必须要省略掉

(五)Lambda表达式的注意事项

注意事项:

  • 使用Lambda必须要有接口,并且要求接口中有且仅有一个抽象方法
  • 必须要有上下文环境,才能推导出Lambda对应的接口 ​ 根据局部变量的赋值得知Lambda对应的接口:Runnable r = () -> System.out.println(“Lambda表达式”); ​ 根据调用方法的参数得知Lambda对应的接口:new Thread(() -> System.out.println(“Lambda表达式”))

(六)Lambda表达式和匿名内部类的区别

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-09-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • Lambda表达式
    • (一)体验Lambda表达式
      • (二)lambda表达式的标准格式
        • (三)Lambda表达式的练习
          • 练习一:抽象方法无参无返回值
          • 练习二:抽象方法带参无返回值
          • 练习三:抽象方法带参带返回值
        • (四)Lambda表达式的省略模式
          • (五)Lambda表达式的注意事项
            • (六)Lambda表达式和匿名内部类的区别
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档