JDK8新特性,记录常用的知识点

news/2024/7/6 12:04:36

文章目录

  • 一、函数式接口
  • 二、Lambda表达式
  • 三、Stream
  • 四、Optional

一、函数式接口

  • 只包含一个抽象方法的接口,称为函数式接口
  • 并且可以使用lambda表达式来创建该接口的对象,
  • 可以在任意函数式接口上使用@FunctionalInterface注解,来检测它是否是符合函数式接口。
  • 同时javac也会包含一条声明,说明这个接口是否符合函数式接口。

1. 自定义函数式接口

@FunctionalInterface
public interface MyNuber{
	public double getValue();
}

二、Lambda表达式

Lambda表达式只能使用在函数式接口

// 普通方法:实现一个函数式接口
Runnable r1 = new Runnable(){
	@Override
	public void run(){
		System.out.println("我爱北京天安门");
	}
};

// JDK8新特性:无参数
Runnable r2 = ()->{System.out.println("我爱北京天安门");};

// JDK8新特性:有参数
Runnable r2 = (String str)->{System.out.println(str);};

三、Stream

// filter 过滤流
public void testFilter() {
    Integer[] arr = new Integer[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    // 输出:4 5 6 7 
    Arrays.stream(arr).filter(x -> x > 3 && x < 8).forEach(System.out::println);
}

// map 转换流
public void testMap() {
    String[] arr = new String[]{"yes", "YES", "no", "NO"};
    // 输出:yes yes no no
    Arrays.stream(arr).map(x -> x.toLowerCase()).forEach(System.out::println);
}

四、Optional

总结概述

  • Optional.of(T t) : 创建一个 Optional 实例
  • Optional.empty() : 创建一个空的 Optional 实例
  • Optional.ofNullable(T t):若 t 不为 null,创建 Optional 实例,否则创建空实例
  • isPresent() : 判断是否包含值
  • orElse(T t) : 如果调用对象包含值,返回该值,否则返回t
  • orElseGet(Supplier s) :如果调用对象包含值,返回该值,否则返回 s 获取的值

使用示例

// 创建optional对象,一般用ofNullable()而不用of()
Optional<String> emptyOpt = Optional.empty();
Optional<String> notNullOpt = Optional.of(str);
Optional<String> nullableOpt = Optional.ofNullable(str);

工作实例

Optional<User> userOptional = new LambdaQueryChainWrapper<>(userMapper)
									.eq(User::getToken,userToken)
									.oneOpt();

http://www.niftyadmin.cn/n/393688.html

相关文章

【走进Linux的世界】Linux---基本指令(2)

个人主页&#xff1a;平行线也会相交 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【Linux专栏】&#x1f388; 本专栏旨在分享学习Linux的一点学习心得&#xff0c;欢迎大家在评论区讨论&#x1f48c; 目录 ls *man指令小…

chatgpt赋能python:Python取款:让你的银行账户管理更智能

Python取款&#xff1a;让你的银行账户管理更智能 介绍 Python不仅是一种全球广泛应用的计算机编程语言&#xff0c;而且还拥有很多适合财务管理和数据处理的工具&#xff0c;用于提高效率和减少错误。本文将重点介绍如何使用Python自动管理银行账户的取款&#xff0c;以及…

二叉树的链式结构 - C语言(含有大量递归)

目录&#xff1a; &#x1f354;前言 &#x1f354;二叉树链式结构的实现 &#x1f35f;基本构架 &#x1f60d;代码&#xff1a; &#x1f354;二叉树的遍历 &#x1f35f;前序遍历 &#x1f35f;中序遍历 &#x1f35f;后序遍历 &#x1f35f;层序遍历 &#x1f53…

SpringBoot+MyBatis 搭建项目基本框架

参考资料:mall整合SpringBootMyBatis搭建基本骨架 一 背景 做的项目多了&#xff0c;就会发现&#xff0c;每次新项目起步&#xff0c;都是一样的。应该整理一个通用的模板来进行快速启动新项目。 二 使用到的框架简介 1.SpringBoot SpringBoot可以让你快速构建基于Spring…

信息论与编码 SCUEC DDDD 期末复习

1.证明熵的可加性 2.假设一帧视频图像可以认为是由3*10的五次方个像素组成&#xff08;每像素均独立变化&#xff09;&#xff0c;如果每个像素可取128个不同的等概率亮度表示。请计算出每帧图像含多少信息量&#xff1f;若有一口述者在约12000个汉字的字汇中选400个字来口述此…

C++——多态与虚表

目录 1.多态的实现 2.虚表 2.1虚函数重写是怎么实现的 2.2多态的原理 2.3静态绑定与动态绑定 3.单继承体系中的虚函数表 ​编辑4.多继承体系中的虚函数表 5.菱形继承的虚函数表 6.菱形虚拟继承的虚函数表 1.多态的实现 在C中&#xff0c;要想实现多态&#xff0c;必…

mysql数据类型有哪几种

Mysql支持的多种数据类型主要有&#xff1a;数值数据类型、日期/时间类型、字符串类型。 整数 浮点数&定点数 注&#xff1a;定点数以字符串形式存储&#xff0c;对精度要求高时使用decimal较好&#xff1b;尽量避免对浮点数进行减法和比较运算。 时间/日期类型 字符串类型…

在编程中,代理、委托、回调、钩子、句柄、打桩的区别

文章目录 代理委托委托与代理的区别 回调回调函数回调函数与普通函数的区别 钩子广义的钩子钩子与代理的区别钩子与委托的区别钩子与回调函数的区别 句柄句柄与钩子的区别 打桩打桩与代理的区别 代理 代理&#xff08;proxy&#xff09;&#xff1a;被代理类写好一套 API 的实现…