前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java Lambda表达式

java Lambda表达式

作者头像
仙士可
发布2023-03-10 16:56:10
5750
发布2023-03-10 16:56:10
举报
文章被收录于专栏:仙士可博客仙士可博客

Lambda表达式

Lambda 表达式是 JDK8 的一个新特性,可以取代大部分的匿名内部类,写出更优雅的 Java 代码,尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构。

JDK 也提供了大量的内置函数式接口供我们使用,使得 Lambda 表达式的运用更加方便、高效。

快速上手

先看一个不用Lambda表达式的例子:

代码语言:javascript
复制
    public static void main(String[] args) throws Exception {
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                System.out.println("hello world");
            }
        };
        runnable.run();
    }

在之前,如果我们需要运行一个线程时,需要实现个匿名类方式运行

Lambda表达式:

代码语言:javascript
复制
    public static void main(String[] args) throws Exception {
        Runnable runnable = ()->System.out.println("hello world");
        runnable.run();
    }

可以看出,代码精简了很多,直接通过Lambda表达式实现了带有run方法的匿名类

在我学习Lambda表达式的时候,总有一个疑问:为什么Lambda表达式可以知道它定义的就是run这个方法呢?如果一个接口有多个方法,Lambda表达式是怎么知道是实现的哪个方法的呢? 很明显,如果是多个方法,Lambda表达式就会出错,所以本身Lambda表达式就是用于 函数式接口

函数式接口

只包含一个抽象方法的接口,称为函数式接口。

这个接口可以使用@FunctionalInterface声明,如果不满足条件,则会报错,可以通过这个方式来判断是否为函数式接口

可以看另一篇文章:https://cloud.tencent.com/developer/article/2237217

语法格式

Lambda通过 3个部分的语法结构来实现:

代码语言:javascript
复制
(x) ->  {}
  • (x) 第一部分为参数,表示需要声明定义传入的参数,类似于方法的形参声明,如果没有参数可以省略
  • -> Lambda表达式 操作符
  • {} 语句块,表示具体实现的方法代码,如果只有一行可以省略{}

语法格式一,有参数,有返回值,多行代码

代码语言:javascript
复制
    public static void main(String[] args) throws Exception {
        Comparator<Integer> comparator = (Integer x,Integer y) -> {
            System.out.println("函数式接口");
            return Integer.compare(x, y);
        };
        System.out.println(comparator.compare(1,2));
    }

语法格式二,无参数,无返回值,一行语句

代码语言:javascript
复制
    public static void main(String[] args) throws Exception {
        Runnable runnable = ()->System.out.println("hello world");
        runnable.run();
    }

一行语句可以省略 {}

语法格式三,有一个参数

代码语言:javascript
复制
    public static void main(String[] args) throws Exception {
        Consumer<String> func = s -> System.out.println(s);
        func.accept("hello world");
    }

只有一个参数时,可以省略小括号

语法格式四,一行语句有返回值

代码语言:javascript
复制
    public static void main(String[] args) throws Exception {
        Comparator<Integer> comparator = (x, y) ->  Integer.compare(x, y);
        System.out.println(comparator.compare(1,1));
    }

只有一行语句时,可以省略return,直接返回

语法格式五,可以省略形参类型,会自己实现类型推断

代码语言:javascript
复制
    public static void main(String[] args) throws Exception {
        Comparator<Integer> comparator = (x, y) -> {
            System.out.println("函数式接口");
            return Integer.compare(x, y);
        };
        System.out.println(comparator.compare(1,2));
    }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-03-09,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Lambda表达式
  • 快速上手
  • 函数式接口
  • 语法格式
    • 语法格式一,有参数,有返回值,多行代码
      • 语法格式二,无参数,无返回值,一行语句
        • 语法格式三,有一个参数
          • 语法格式四,一行语句有返回值
            • 语法格式五,可以省略形参类型,会自己实现类型推断
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档