前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java8新特性——Lambda表示式

Java8新特性——Lambda表示式

原创
作者头像
Java学术趴
发布于 2022-08-09 15:29:50
发布于 2022-08-09 15:29:50
62500
代码可运行
举报
文章被收录于专栏:Java全栈·Java全栈·
运行总次数:0
代码可运行

👨‍🎓作者:Java学术趴 🏦仓库:GithubGitee ✏️博客:CSDN掘金InfoQ云+社区 💌公众号:Java学术趴 🚫特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系小编授权。 🙏版权声明:文章里的部分文字或者图片来自于互联网以及百度百科,如有侵权请尽快联系小编。

☠️每日毒鸡汤:放心,闭上眼,睡一觉,反正明天也不一定比今天好。

1.1 Java8的新特性

1.2 Java8新特性的特点

  • 速度快。
  • 代码更少(增加了新的语法:Lambda表达式)
  • 强大的Stream API
    • 并行流: 就是把一个内容分成多个数据块,并用不同的线程分别处理每个数据块的流。相比串行的流,并行流可以很大程度上提高程序的执行效率。
    • Java 8 中将并行进行了优化,我们可以很容易的对数据进行并行操作。Stream API 可以声明性地通过 parallel()sequentail() 在并行流与顺序流之间进行切换。
  • 便于并行
  • 最大化减少空指针异常:Optional
  • Nashorn引擎,允许在JVM上运行JS应用

1.3 Lambda表示式

1.3.1 为什么使用 Lambda 表达式

  • Lambda是一个 匿名函数,我们可以把 Lambda表达式理解为是一段可以传递的代码(将代码能像数据一样进行传递)。使用它可以写出更简洁、更灵活的代码,作为一个更紧凑的代码风格,使Java的语言表达能力得到了提升。

Lambda表达式简单的用法

使用Lambda表达式来替换匿名函数

使用Lombda表达式编写内置函数以及调用方法

1.3.2 Lombda表达式使用(分为6中情况使用)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Lombda的使用,语法介绍
(o1,o2) -> Integer.compare(o1,o2);
格式:
    -> : lambda操作符 或 箭头操作符
    ->左边 :lambda形参列表(其实就是接口中的抽象方法的形参列表)
    ->右边:lambda体(其实就是重写的抽象方法的方法体)
复制代码
1.3.2.1 语法格式一:无参无返回值
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static void main(String[] args) {// lambda表达式的第一种语法,无参无返回值
    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            System.out.println("我是原始的写法");
        }
    };
​
    runnable.run();// 使用lambda表达式
    Runnable runnable1 = () -> System.out.println("我是lambda写法");
    
}
复制代码
1.3.2.2 语法格式二:有一个参数,但是没有破返回值
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static void main(String[] args) {// lambda表达式的第二种语法,有一个参数,但是没有返回值
    Consumer<String> consumer = new Consumer<String>() {
        @Override
        public void accept(String s) {
            System.out.println(s);
        }
    };
    consumer.accept("我是原始的方法");
    
    Consumer<String> consumer1 = (String s) -> {
        System.out.println(s);
    };
    consumer1.accept("我是lambda方法");
}
复制代码
1.3.2.3 语法格式三:数据类型可以省略,因为可由编译器推断得出,称为“类型推断”
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Consumer<String> consumer2 = (s) -> {
    System.out.println(s);
};
consumer1.accept("我是数据推断的方法");
复制代码
1.3.2.4 语法格式四:Lambda若只需要一个参数时,参数的小括号可以省略
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Consumer<String> consumer2 = s -> {
    System.out.println(s);
};
consumer1.accept("当只存在一个参数的时候,小括号可以省略");
复制代码
1.3.2.5 语法格式五:Lambda需要两个或两个以上的参数,并且存在多条执行语句,并且可以有返回值
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Comparator<Integer> com2 = (o1,o2) -> {
  System.out.println(o1);
  System.out.println(o2);
  return o1.compareTo(o2);
}
// 此时参数需要有小括号,代码块需要有花括号
复制代码
1.3.2.6 语法六:当Lambda体只有一条语句的时候,大括号可以省略,如果这一条语句是return语句,还可以省略 return
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Comparator<Integer> com2 = (o1,o2) -> {
  return o1.compareTo(o2);
}
// 此时函数体只存在一条语句,并且是return语句,可以省略函数体的花括号并且可以省略 return 关键字 
Comparator<Integer> com2 = (o1,o2) -> o1.compareTo(o2);
复制代码

1.4 函数式接口

1.4.1 函数式接口的概念
  • 只包含一个抽象方法的接口,称为函数式接口。
  • 你可以通过 Lambda 表达式来创建该接口的对象。(若 Lambda 表达式抛出一个受检异常 即:非运行时异常,那么该异常需要在目标接口的抽象方法上进行声明)。
  • 我们可以在一个接口上使用 @FunctionalInterface 注解,这样做可以检查它是否是一个函数式接口。同时 Javadoc 也会包含一条声明,说明这个接口是一个函数式接口。
  • 在 java.util.function 包下定义了Java8的丰富的函数式接口。
1.4.2 如何理解函数式接口
  • Java从诞生开始就一直倡导“一切皆对象”,在Java里面面向对象(OOP)编程是一切。但是随着Python、scala等语言的兴起和新技术是的挑战,Java不得不做出调整以便支持更加广泛的技术要求,也即Java不但可以支持OOP还可以支持OOF(面向函数编程)
  • 在函数式编程语言中,函数被当做一等公民对待。在将函数作为一等公民的编程语言中,Lambda表达式的类型是函数。但是在Java8中,有所不同。在Java8中,Lambda表达式是对象,而不是函数,他们必须依附于一类特别的对象类型——函数式接口。
  • 简单的说,在Java8中,Lambda表达式就是一个函数式接口的实例。 这就是Lambda表达式和函数式接口的关系。也就是说,只要一个对象是函数式接口的实例,那么该对象就可以使用 Lambda 表达式来表示。
  • 所以以前用匿名实现类表示的现在都可以用 Lambda 表达式来写。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【JDK1.8 新特性】Lambda表达式
Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。使用它可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。
CODER-V
2023/03/08
2710
Java8新特性: Lambda helloworld
Java 8 (又称为 jdk 8 ) 是java语言开发的一个主要版本,Java8是 oracle 公司 2014 4月发布的,可以看成自java5 以来最具革命性的版本,Java 8 为java 语言,编译器,类库,开发功能与JVM带来了大量的新特性
冷环渊
2021/12/12
2580
Java8新特性
Lambda 是一个匿名函数,可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。使用它可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使 Java 的语言表达能力得到了提升。
程序员Leo
2023/08/08
3610
Java8新特性
Java8新特性详解
Java 8 是oracle公司于2014年3月发布,可以看成是自Java 5 以来最具革命性的版本。Java 8为Java语言、编译器、类库、开发工具与JVM带来了大量新特性。
Jensen_97
2023/07/20
2.3K0
Java8新特性详解
JDK8新特性总结
Lambda 需要一个参数,但是没有返回值。且 Lambda 若只需要一个参数时,参数的小括号可以省略。数据类型也可以省略,因为可由编译器推断得出,称为“类型推断”。
乐心湖
2021/01/18
3730
JDK8新特性总结
【Java8新特性】Lambda表达式基础语法,都在这儿了!!
Lambda表达式在Java语言中引入了 “->” 操作符, “->” 操作符被称为Lambda表达式的操作符或者箭头操作符,它将Lambda表达式分为两部分:
冰河
2020/10/29
3670
【Java8新特性】Lambda表达式基础语法,都在这儿了!!
Java基础(二十五):Lambda表达式、方法引用、构造器引用
冬天vs不冷
2025/01/21
1750
Java基础(二十五):Lambda表达式、方法引用、构造器引用
函数式编程:Lambda 表达式
曾经读过的依然令我感动的句子,生活总是不如意,但往往是在无数痛苦中,但往往是在无数痛苦中,在重重矛盾
RainbowSea
2023/03/06
6890
Java 8新特性
并行流就是把一个内容分成多个数据块,并用不同的线程分别处理每个数据块的流。相比较串行的流,并行的流可以很大程度上提高程序的执行效率。
用户9615083
2022/12/25
1.4K0
Java 8新特性
Java8 Lambda表达式与Stream API (一):Lambda表达式你要知道的Java8 匿名内部类、函数式接口、lambda表达式与Stream API都在这里
你要知道的Java8 匿名内部类、函数式接口、lambda表达式与Stream API都在这里 转载请注明出处 https://cloud.tencent.com/developer/user/1605429 本文主要讲解Java8 Stream API,但是要讲解这一部分需要匿名内部类、lambda表达式以及函数式接口的相关知识,本文将分为两篇文章来讲解上述内容,读者可以按需查阅。 Java 匿名内部类、lambda表达式与函数式接口 Java Stream API 本文是该系列博文的第一篇Java 匿名
WWWWDotPNG
2018/04/10
1.1K0
JDK8中的新特性(Lambda、函数式接口、方法引用、Stream)
<font color=red>Java 8</font> (又称为 JDK 8或JDK1.8) 是 Java 语言开发的一个主要版本。 Java 8 是oracle公司于2014年3月发布,可以看成是自Java 5 以来最具革命性的版本。Java 8为Java语言、编译器、类库、开发工具与JVM带来了大量新特性。
鱼找水需要时间
2023/06/01
8370
JDK8中的新特性(Lambda、函数式接口、方法引用、Stream)
Java8新特性----Lambda表达式详细探讨
​ Lambda是一个匿名函数,可以理解为一段可以传递的代码(将代码像数据一样传递);可以写出更简洁、更灵活的代码;作为一种更紧凑的代码风格,是Java语言表达能力得到提升
大忽悠爱学习
2021/11/15
2910
java8新特性(一):Lambda表达式
Lambda 是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。
周三不加班
2019/09/03
4080
java8新特性(一):Lambda表达式
Java8 新特性
北京时间2018年9月26日,Oracle官方发布Java 11。既然版本都更新到11了,现在才来学8是不是太晚了?其实不是的,目前应该大部分都还是使用的Java 7和Java 8,这两个应该还是主流。而Java 8 又有一些激动人心的新特性,所以还是值得学习的。Java 8 新特性主要有以下几点:
贪挽懒月
2018/12/26
2.8K0
一篇文章教会你使用 Java8 中的 Lambda 表达式
Java8 为开发者带来了许多重量级的新特性,包括Lambda表达式,流式数据处理,新的Optional类,新的日期和时间API等。这些新特性给Java开发者带来了福音,特别是Lambda表达式的支持,使程序设计更加简化。本篇文章将讨论行为参数化,Lambda表达式,函数式接口等特性。
一个正经的程序员
2023/09/13
4670
一篇文章教会你使用 Java8 中的 Lambda 表达式
JavaSE:第十六章:java8新特性
##java8内容 1.Lambda表达式 ★ 2.函数式接口 ★ 3.方法引用 ★ 4.构造器引用|数组引用 ★ 5.StreamAPI ★ 6.接口中可以定义默认方法和静态方法 ★ 7.Optional类的引入:为了减少空指针异常【了解】 8.新日期API【了解】 9.重复注解【了解】 10.Nashone引擎的使用:在jvm上运行js【后面课程】
Java廖志伟
2022/08/01
6180
Lambda表达式 & Stream 流 & Java8 新特性
JDK 也提供了大量的内置函数式接口供我们使用,使得 Lambda 表达式的运用更加方便、高效。
收心
2022/01/17
2970
Java8新特性学习--函数式编程
函数式编程并不是Java新提出的概念,其与指令编程相比,强调函数的计算比指令的计算更重要;与过程化编程相比,其中函数的计算可以随时调用。
beifengtz
2019/07/10
6290
Lambda表达式
Lambda表达式本质:用作接口的实现(其实就是把之前实现接口的步骤简化了)。接口必须是函数式接口
十玖八柒
2022/08/01
3130
Java8学习(3)- Lambda 表达式
猪脚:以下内容参考《Java 8 in Action》 本次学习内容: Lambda 基本模式 环绕执行模式 函数式接口,类型推断 方法引用 Lambda 复合 代码: https://github.com/Ryan-Miao/someTest/blob/master/src/main/java/com/test/java8/c3/AppleSort.java 上一篇: Java8学习(2)- 通过行为参数化传递代码--lambda代替策略模式 ---- 1. 结构 初始化一个比较器: Comparato
Ryan-Miao
2018/03/13
1.1K0
Java8学习(3)- Lambda 表达式
相关推荐
【JDK1.8 新特性】Lambda表达式
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验