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

Java8 Lambda表达式、Optional类浅析

作者头像
Kevin_Zhang
发布2021-06-21 20:26:04
4070
发布2021-06-21 20:26:04
举报
文章被收录于专栏:Kevin-ZhangCGKevin-ZhangCG

1.概念

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

2. Lambda表达式的基础语法

java8中引用了一个新的操作符"->",该操作符称为箭头操作符或者Lambda操作符,箭头操作符将Lambda表达式分为了两部分:

  • 左边:Lambda表达式的参数列表
  • 右边:Lambda表达式中,所需要执行的功能,即 Lambda体

语法格式一:无参数,无返回值的方法 () -> Lambda体 如: () -> System.out.println("hello");

语法格式二:有一个参数,并且无返回值 (参数1) -> Lambda体 如: (x) -> System.out.println("hehe");

语法格式三:若只有一个参数小括号可以省略不写 参数1-> Lambda体 如: x -> System.out.println("hehe");

语法格式四:有两个以上的参数,有返回值,并且Lambda体中有多条语句 (参数1,参数2) -> {语句体1;语句体2}; 如:

代码语言:javascript
复制
            Comparator com -> (x,y) -> {
                System.out.println("函数式接口");
                return Integer.compare(x,y);
            }

语法格式五:若Lambda体中只有一条语句,return和大括号都可以不写 (参数1,参数2) -> 语句体1; 如: Comparator com = (x,y) -> Integer.compare(x,y);

语法格式六:Lambda表达式的参数列表的数据类型可以省略不写,因为JVM编译器通过上下文推断出数据类型即“类型推断” 如: (Integer x, Integer y) -> Integer.compare(x,y);

3. Lambda表达式需要“函数式接口”的支持

函数式接口:接口中只有一个抽象方法的借口,称为函数式接口,可以使用注解** @FunctionInterface **修饰,可以检查是否是函数式接口

4. java8中内置的四大核心函数式接口

代码语言:javascript
复制
Consumer<T> : 消费型接口
void accept(T t);
代码语言:javascript
复制
Supplier<T> : 供给型接口
 T get();
代码语言:javascript
复制
Function<T, R> : 函数型接口
 R apply(T t);
代码语言:javascript
复制
Predicate<T> : 断言型接口
boolean test(T t);

5. 方法引用

概念:若Lambda 体中的内容有方法已经实现了,我们可以使用“方法引用”(可以理解为“方法引用”是Lambda表达式的另外一种表现形式)

主要有三种语法格式:
  • 对象::实例方法名
  • 类::静态方法名
  • 类::实例方法名

注意:

  • Lambda体中调用方法的参数列表与返回值类型,要与函数式接口中抽象方法的函数列表和返回值保持一致;
  • 若 Lambda 参数列表中的第一个参数是实例方法的调用者,而第二个参数是实例方法的参数时,可以使用ClassName :: method (类::实例方法名)

6. 构造器引用

格式: ClassName::new

注意:

  • 需要调用的构造器的参数列表要与函数式接口中抽象方法的参数列表保持一致

7. 数组引用

格式: Type[]::new;

Optional类

<1> 概念

Optional是一个容器类,代表一个值存在或不存在,原来用null表示值不存在,现在Optional可以更好的表达这个概念。并且可以避免空指针异常

<2> Optional容器类的常用方法
  • Optional.of(T t):创建一个Optional实例
  • Optional.empty():创建一个空的Optional实例
  • Optional.ofNullable(T t):若t不为null,创建一个Optional实例,否则创建空实例

注意:

  • of方法不能构建null,会报出空指针异常
  • empty只是构建一个空的Optional
  • ofNullable传入对象就构建对象,传入null就构建一个空的Optional
  • isPresent():判断是否包含值
  • orElse(T t):如果调用对象包含值,返回该值,否则返回t
  • orElseGet(Supplier s):如果调用对象包含值,返回该值 否则返回s获取的值
  • map(Function f):如果有值对其处理,并返回处理后的Optional,否则返回Optional.empty()
  • flatMap(Function mapper):与map类似,要求返回值必须是Optional

原文参见公众号【Java知音】

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.概念
  • 2. Lambda表达式的基础语法
  • 3. Lambda表达式需要“函数式接口”的支持
  • 4. java8中内置的四大核心函数式接口
  • 5. 方法引用
  • 6. 构造器引用
  • 7. 数组引用
    • Optional类
      • <1> 概念
      • <2> Optional容器类的常用方法
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档