Lambda表达式

Lambda表达式

大纲

具体案例

在这里插入图片描述
-> :lambda操作符或者箭头操作符
-> 左边:lambda形参列表 (其实就是接口中的抽象方法的形参列表)
-> 右边:lambda体 (其实就是重写的抽象方法的方法体)

lambda的使用

本质(Java中):作为接口的实例

无参,无返回值

public class lambdaTest1 {
    @Test
    public void test() {
        Runnable r1 = new Runnable() {
            @Override
            public void run() {
                System.out.println("传统写法");
            }
        };
        r1.run();
        // 无参,无返回值的lambda
         Runnable r2 = () -> {
            System.out.println("lambda 写法");
        };
        r2.run();
    }
}

一个参数,无返回值

public class lambdaTest2 {
    @Test
    public void test(){
        Consumer<String> con = new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        };
        con.accept("传统方法");

        // lambda 表达式方法,需要一个参数,无返回值
        Consumer<String> con1 = (String s)->{
            System.out.println(s);
        };
        con1.accept("lambda方法");
    }
}

数据类型可以省略,因为可以由编译器推断出(编译推断)

注意和上面有点区别

public class lambdaTest2 {
    @Test
    public void test(){
        Consumer<String> con = new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        };
        con.accept("传统方法");

        // lambda 表达式方法,需要一个参数,无返回值
        // (类型推断版本)
        Consumer<String> con1 = (s)->{
            System.out.println(s);
        };
        con1.accept("lambda方法");
    }
}

lambda若只需要一个参数,参数的小括号可以省略

public class lambdaTest2 {
    @Test
    public void test() {
        Consumer<String> con = new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        };
        con.accept("传统方法");

        // lambda 表达式方法,需要一个参数,无返回值
        // (类型推断版本)
        Consumer<String> con1 = (s) -> {
            System.out.println(s);
        };
        con1.accept("lambda方法(类型推断)");
        Consumer<String> con2 = s -> {
            System.out.println(s);
        };
        con2.accept("lambda方法 省略括号");
    }
}

lambda 需要两个或以上的参数,多条执行语句,并且可以有返回值

Comparator<Integer> con3 = new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                System.out.println(o1);
                System.out.println(o2);
                return o1.compareTo(o2);
            }// 传统方式
        };
        Comparator<Integer> con4 = (o1, o2) -> {
            System.out.println(o1);
            System.out.println(o2);
            return o1.compareTo(o2);
        }; // lambda表达式

当lambda 体只有一条语句时,return 与{}若有,可以省略

 Comparator<Integer> con5 = new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1.compareTo(o2);
            } // 传统方式
        };
        //  当lambda 体只有一条语句时,return 与{}若有,可以省略
        Comparator<Integer> con6 = (o1, o2) -> o1.compareTo(o2);
    }

总结

-> :lambda操作符或者箭头操作符
-> 左边:lambda形参列表 (其实就是接口中的抽象方法的形参列表)
-> 右边:lambda体 (其实就是重写的抽象方法的方法体)

-> 左边:可以省略数据类型(数据推断),如果只有一个形参,可以省略()
-> 右边:如果只有一条语句,可以省略{}和return

函数式接口

如果一个接口中,只声明了一个抽象方法,则此接口就称为函数式接口
有注解@FunctionalIntetrface

Runable,Comparator
在这里插入图片描述

当然我们也可以自己定义函数式接口

相关推荐

  1. Lambda表达式

    2024-04-02 11:08:02       27 阅读
  2. Lambda表达式

    2024-04-02 11:08:02       29 阅读
  3. Lambda 表达式

    2024-04-02 11:08:02       20 阅读
  4. Lambda表达式

    2024-04-02 11:08:02       15 阅读
  5. Lambda表达式

    2024-04-02 11:08:02       20 阅读
  6. lambda表达式

    2024-04-02 11:08:02       11 阅读
  7. Lambda表达式

    2024-04-02 11:08:02       16 阅读
  8. Lambda表达式

    2024-04-02 11:08:02       11 阅读
  9. Lambda表达式

    2024-04-02 11:08:02       14 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-02 11:08:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-02 11:08:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-02 11:08:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-02 11:08:02       18 阅读

热门阅读

  1. 导航守卫有哪三种?分别有什么作用

    2024-04-02 11:08:02       15 阅读
  2. 【漏洞复现】金和OA XmlDeal.aspx XXE漏洞

    2024-04-02 11:08:02       13 阅读
  3. 探索Django:打造高效、可扩展的Web应用(上)

    2024-04-02 11:08:02       15 阅读
  4. 新手基于axios 的二次封装

    2024-04-02 11:08:02       18 阅读
  5. linux期末知识点总结

    2024-04-02 11:08:02       14 阅读