Java8的新特性

Java8的新特性

    • 一、函数式接口
      • 1、Java内置的函数式接口
    • 二、Lambda表达式
      • 1、Lambda作用
      • 2、语法
      • 3、Lambda表达式的六种使用
        • 3.1、抽象方法:无参、无返回值
        • 3.2、抽象方法:需要传一个参数、无返回值
        • 3.3、抽象方法:需要传一个参数(类型省略,编译器自动推断)、无返回值
        • 3.4、抽象方法:只有一个参数时,形参的小括号可以省略、无返回值
        • 3.5、抽象方法:有两个或以上的参数,多条执行语句,并且有返回值
        • 3.6、抽象方法:Lambda体只有一条语句时, return和大括号都可以省略
    • 三、方法引用/构造器引用/数组引用
      • 1、方法引用的使用前提:
      • 2、Lambda语法糖的写法
    • 四、Stream API
      • 1、并行流
      • 2、串行流
    • 五、接口的增强
      • 1、静态方法
      • 2、默认方法
    • 六、Optional类
    • 七、新的时间和日期API
    • 八、其他特性
      • 1、重复注解
      • 2、类型注解
      • 3、通用目标类型推断
      • 4、JDK的更新
        • 4.1、集合的流式操作
        • 4.2、并发
        • 4.3、Arrays
        • 4.4、Number和Math
        • 4.5、IO/NIO的改进
        • 4.6、Reflection获取形参名
        • 4.7、String: join()
        • 4.8、Files
      • 5、新编译工具:jjs、jdeps
      • 6、JVM中的Metaspace取代PermGen空间

一、函数式接口

函数式接口 有且仅有一个抽象方法

1、Java内置的函数式接口

在这里插入图片描述

// Function<T, R> -T作为输入,返回的R作为输出   
Function<String,String> fun = (x) -> {return "Function";};
System.out.println(fun.apply("hello world"));    // 输出: Function//Predicate<T> -T作为输入,返回的boolean值作为输出
Predicate<String> pre = (x) ->{System.out.print(x);return false;};  
System.out.println(": "+pre.test("hello World"));  // hello World: false//Consumer<T> - T作为输入,执行某种动作但没有返回值   
Consumer<String> con = (x) -> {System.out.println(x);};  
con.accept("hello world");  // hello world//Supplier<T> - 没有任何输入,返回T   
Supplier<String> supp = () -> {return "Supplier";};  
System.out.println(supp.get());  // Supplier//BinaryOperator<T> -两个T作为输入,返回一个T作为输出,对于“reduce”操作很有用   
BinaryOperator<String> bina = (x,y) ->{System.out.print(x+" "+y);return "BinaryOperator";};  
System.out.println(" "+bina.apply("hello ","world"));

二、Lambda表达式

Lambda表达式的本质: 作为函数式接口的实例对象【接口的匿名实现】,本质是一个匿名函数。
Lambda表达式对应的编译类型: 1、接口; 2、且该接口有且仅有一个抽象方法 即是(函数式接口)

1、Lambda作用

  • 简写接口的匿名内部类的写法

2、语法

ArrayList<Integer> list = new ArrayList<>(); // 类型推到,运行类型的<>省略类型
list.add(1);
list.add(2);
list.add(3);
/*** (o1, o2) -> Integer.compare(o2, o1)* -> 表示Lambda操作符或者箭头操作符* -> 左边:Lambda形参列表(即:匿名内部类重新方法的形参列表)* -> 右边:Lambda体 (即:重写的抽象方法的方法体)*/
list.sort((o1, o2) -> Integer.compare(o2, o1));
System.out.println(list);

3、Lambda表达式的六种使用

3.1、抽象方法:无参、无返回值
Runnable r = () -> System.out.println("Runnable中的run方法被重写了");
r.run();
3.2、抽象方法:需要传一个参数、无返回值
Consumer<String> con = (String s) -> System.out.println(s);
con.accept("Test");
3.3、抽象方法:需要传一个参数(类型省略,编译器自动推断)、无返回值
Consumer<String> con = (s) -> System.out.println(s);
con.accept("Test");
3.4、抽象方法:只有一个参数时,形参的小括号可以省略、无返回值
Consumer<String> con = s -> System.out.println(s);
con.accept("Test");
3.5、抽象方法:有两个或以上的参数,多条执行语句,并且有返回值
Comparator<Integer> com = (o1, o2) -> {System.out.println("line one");return o1 - o2;
};
3.6、抽象方法:Lambda体只有一条语句时, return和大括号都可以省略
Comparator<Integer> com = (o1, o2) -> o1 - o2;
com.compare(12, 6);

三、方法引用/构造器引用/数组引用

方法引用其实就是Lambda表达式的语法糖。

1、方法引用的使用前提:

重写的抽象方法的形参列表和返回值类型与Lambda体方法引用的方法的形参列表和返回值类型相同。

2、Lambda语法糖的写法

  • 对象 :: 非静态方法/实例方法名
  • 类 :: 静态方法名
  • 类 :: 非静态方法名

四、Stream API

1、并行流

2、串行流

五、接口的增强

1、静态方法

2、默认方法

六、Optional类

七、新的时间和日期API

八、其他特性

1、重复注解

2、类型注解

3、通用目标类型推断

4、JDK的更新

4.1、集合的流式操作
4.2、并发
4.3、Arrays
4.4、Number和Math
4.5、IO/NIO的改进
4.6、Reflection获取形参名
4.7、String: join()
4.8、Files

5、新编译工具:jjs、jdeps

6、JVM中的Metaspace取代PermGen空间

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/46854.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux网络攻击防御高级指南:结合 iftop 和 iptables

Linux网络攻击防御高级指南&#xff1a;结合 iftop 和 iptables&#xff08;含规则审查&#xff09; 网络攻击&#xff0c;特别是DDoS&#xff08;分布式拒绝服务&#xff09;攻击&#xff0c;可能导致服务器带宽资源枯竭&#xff0c;严重影响服务稳定性。本高级指南将引导您如…

【笔记】FLOPs 和 FLOPS: 前者(FLOPs) 越大,说明模型的计算复杂度越高;后者(FLOPS)越大,说明硬件的计算速度越快

FLOPs&#xff08;Floating Point Operations&#xff09;&#xff1a;这是指一个模型在一次前向传播中需要进行的浮点运算次数&#xff0c;是一个衡量模型计算复杂度的指标。FLOPs越大&#xff0c;说明模型的计算复杂度越高。 FLOPS&#xff08;Floating Point Operations Pe…

【iOS】OC类与对象的本质分析

目录 前言clang常用命令对象本质探索属性的本质对象的内存大小isa 指针探究 前言 OC 代码的底层实现都是 C/C代码&#xff0c;OC 的对象都是基于 C/C 的数据结构实现的&#xff0c;实际 OC 对象的本质就是结构体&#xff0c;那到底是一个怎样的结构体呢&#xff1f; clang常用…

IDEA实现SpringBoot项目的自打包自发布自部署

目录 前言 正文 操作背景 自发布 自部署 尾声 &#x1f52d; Hi,I’m Pleasure1234&#x1f331; I’m currently learning Vue.js,SpringBoot,Computer Security and so on.&#x1f46f; I’m studying in University of Nottingham Ningbo China&#x1f4eb; You can reach…

社交媒体安全:个人信息泄露与社交工程攻击的防范

社交媒体安全&#xff1a;个人信息泄露与社交工程攻击的防范 社交媒体平台的普及带来了个人信息泄露和社交工程攻击的风险。个人信息泄露可能导致身份盗窃、诈骗等问题&#xff0c;而社交工程攻击则利用心理学和社会学手段欺骗用户&#xff0c;获取敏感信息或系统访问权限。 个…

用户excel对CAN进行图形化展示

在Excel中对CAN数据进行图形化展示&#xff0c;用户可以通过以下几个步骤来实现&#xff1a; 一、数据准备 导出CAN数据&#xff1a;首先&#xff0c;需要将CAN数据从CAN分析工具或设备中导出为Excel支持的格式&#xff08;通常是.xlsx或.csv&#xff09;。大多数CAN系列工具软…

LVS的DR模式

一、DR模式 DR模式&#xff1a;直接路由模式 1.1 DR模式的工作方式 调度器在整个LVS集群当中是最重要的。 在NAT模式下&#xff0c;调度器负责接受请求&#xff0c;同时根据负载均衡的算法转发流量&#xff0c;响应给客户端。 DR模式下&#xff0c;调度器依然负责接受请求…

qt 创建一个左侧边线拖拽的矩形

1.概要 2.代码 2.1 代码第一版 在Qt中&#xff0c;要创建一个可以向左侧拖拽边线的矩形&#xff0c;你需要自定义一个QGraphicsRectItem的子类&#xff0c;并重写其事件处理函数来响应鼠标的拖拽动作。以下是一个简单的实现示例&#xff1a; #include <QApplication>…

设计模式——装饰者模式

设计模式——装饰者模式 1.问题1.1 方案一1.2 方案二 2.装饰者模式2.1 基本介绍2.2 结构2.3 代码实现 3.小结 1.问题 咖啡订单项目&#xff1a; 咖啡种类/单品咖啡:Espresso(意大利浓咖啡)、ShortBlack、LongBlack(美式咖啡)、Decaf(无因咖啡)调料:Milk、Soy(豆浆)、Chocolat…

「Conda」在Linux系统中安装Conda环境管理器

在Linux系统中安装Conda环境管理器是一个相对简单的过程。 1. 准备工作 确保你的Linux系统已经更新到最新版本,并安装了基本的开发工具和库。打开终端,执行以下命令: sudo apt-get update sudo apt-get upgrade sudo apt-get install build-essential2. 安装Miniconda或An…

GB35114控制信令认证流程

GB35114控制信令认证说明&#xff1a; 注册成功后,信令发送方与信令接收方进行交互时,采用基于带密钥的杂凑方式保障信令来源安 全&#xff61;对除REGISTER消息以外的消息做带密钥的杂凑&#xff61;启用Date字段,扩展信令消息头域,在头域中 增加 Note 字 段 (值 为 Digest…

项目经理到底要不要考PMP?

在接待PMP学员中我惊讶地发现&#xff0c;不仅是项目经理&#xff0c;连开发、测试、产品、运营、销售、甚至财务团队的朋友们也都在积极备考。他们考证的原因主要有这几点&#xff1a; 1&#xff0c;职业发展&#xff1a;希望在职业生涯中晋升或转型到项目管理角色的朋友来说…

Spring MVC 全注解开发

1. Spring MVC 全注解开发 文章目录 1. Spring MVC 全注解开发2. web.xml 文件 的替代2.1 Servlet3.0新特性2.2 编写 WebAppInitializer 3. Spring MVC的配置3.1 Spring MVC的配置&#xff1a;开启注解驱动3.2 Spring MVC的配置&#xff1a;视图解析器3.3 Spring MVC的配置&…

SourceTree rebase(变基)的使用

参考资料 【Sourcetree】コミットを一つにまとめる【Sourcetree】リベースする 目录 前提0.1 merge与rebase0.2 merge合并分支0.3 rebase合并分支0.4 &#x1f4a5;超级注意事项&#x1f4a5; 一. 代码已提交&#xff0c;未推送&#xff0c;交互式变基1.1 通过SourceTree操作1…

UWA学堂上新|服务器AOI(Area Of Interest)算法和功能实现

课程是《基于.NetCore开发MMORPG分布式游戏服务器》系列课程第6节&#xff0c;本系列课程旨在帮助大家从零开始搭建商业化MMORPG的分布式服务器框架&#xff0c;包括不同种类服务器的线程模型&#xff0c;如中心服务器、网关服务器、游戏服务器、寻路服务器等&#xff0c;并讲解…

PICO,迷途VR?

随着科技的持续向前发展&#xff0c;越来越多的智能可穿戴设备涌现出来。除了最为大众所熟知的智能手环、智能手表之外&#xff0c;VR设备同样是可穿戴设备领域的一大细分领域&#xff0c;不少巨头都在VR领域有所布局。 回溯过往可知&#xff0c;VR并非新鲜事物&#xff0c;早…

【NLP实战】基于TextCNN的新闻文本分类

TextCNN文本分类在pytorch中的实现 基于TextCNN和transformers.BertTokenizer的新闻文本分类实现&#xff0c;包括训练、预测、数据加载和准确率评估。 目录 项目代码TextCNN网络结构相关模型仓库准备工作项目调参预测与评估 1.项目代码 https://github.com/NeoTse0622/Te…

怎么选流量套餐最划算呢,这篇文章建议收藏!

据小编了解&#xff0c;现在大多数用户手上都不止一张SIM卡&#xff0c;大部分都是双卡&#xff0c;甚至三卡了&#xff0c;那么&#xff0c;这些卡槽你真的利用对了吗&#xff1f; 这篇文章就告诉大家&#xff0c;如何更好的利用这两个卡槽&#xff0c;让你即省钱&#xff0c…

XML 验证器:确保数据完整性和准确性的关键工具

XML 验证器&#xff1a;确保数据完整性和准确性的关键工具 引言 在当今数字化时代&#xff0c;数据的有效管理和交换至关重要。XML&#xff08;可扩展标记语言&#xff09;作为一种用于存储和传输数据的语言&#xff0c;广泛用于各种应用程序和系统之间。为确保XML数据的完整…