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,一经查实,立即删除!

相关文章

【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…

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…

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…

【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…

(02)Unity使用在线AI大模型(调用Python)

目录 一、概要 二、改造Python代码 三、制作Unity场景 一、概要 查看本文需完成&#xff08;01&#xff09;Unity使用在线AI大模型&#xff08;使用百度千帆服务&#xff09;的阅读和实操&#xff0c;本文档接入指南的基础上使用Unity C#调用百度千帆大模型&#xff0c;需要…

十五、C++11常用新特性—Lambda表达式

1.基本 这个好像是很好用的&#xff0c;其有以下有点&#xff1a; 声明式的编程风格&#xff1a;直接匿名定义目标函数或函数对象&#xff0c;不需要额外写一个命名函数或函数对象。简洁&#xff1a;避免了代码膨胀和功能分散&#xff0c;让开发更加高效。在需要的时间和地点…

Sentieon应用教程 | 唯一分子标识符(UMI)

介绍 本文介绍了使用Sentieon工具处理下一代测序数据的方法&#xff0c;同时利用分子条码信息&#xff08;也称为唯一分子索引或UMI&#xff09;。分子条码可以在测序之前在模板DNA分子的末端引入唯一标签&#xff0c;从而大大减少PCR重复和测序错误对变异调用过程的影响。 S…

影视迷必备:揭秘高效影视app开发幕后

影视迷必备的高效影视APP开发幕后涉及多个关键环节&#xff0c;从需求分析、规划设计、技术开发到测试上线&#xff0c;再到后续的运营与维护&#xff0c;每一个环节都至关重要。 一、需求分析 在开发影视APP之前&#xff0c;首要任务是进行深入的需求分析。这一阶段的主要目标…

CSS选择器(1)

以内部样式表编写CSS选择器&#xff0c;其主要编写在<head></head>元素里&#xff0c;通过<style></style>标签来定义内部样式表。 基本语法为&#xff1a; 选择器{ 声明块 } 声明块&#xff1a;是由一对大括号括起来&#xff0c;声明块中是一个一个的…

python-矩阵加法(赛氪OJ)

[题目描述] 输入两个 n 行 m 列的矩阵 A 和 B &#xff0c;输出它们的和 AB。矩阵加法的规则是两个矩阵中对应位置的值进行加和&#xff0c;具体参照样例。输入&#xff1a; 输入共 2⋅n1 行&#xff0c;第一行包含两个整数 n 和 m&#xff0c;表示矩阵的行数和列数 (1≤n,m≤1…

艺术创作的新维度:yicaiai照片风格化

艺术创作的新维度&#xff1a;yicaiai照片风格化 一、用户友好的设计理念 1.1 yicaiai照片风格化的核心设计理念 yicaiai平台以其创新的AI技术&#xff0c;颠覆了传统照片处理的方式&#xff0c;将艺术与科技完美融合。其核心设计理念在于赋予普通照片无尽的艺术潜力&#xf…

这3种人适合学习人工智能,看看你在不在其中?

人工智能&#xff08;AI&#xff09;的浪潮正席卷全球&#xff0c;它不仅是科技领域的一场革命&#xff0c;更是社会进步的重要推手。随着AI技术的不断成熟和应用领域的不断拓展&#xff0c;越来越多的人开始关注并渴望掌握这一前沿技术。那么&#xff0c;究竟哪些人适合学习人…

华为od机试真题 — 测试用例执行计划(Python)

题目描述 某个产品当前迭代周期内有N个特性&#xff08;F1, F2, ..., FN&#xff09;需要进行覆盖测试&#xff0c;每个特性都被评估了对应的优先级&#xff0c;特性使用其ID作为下标进行标识。 设计了M个测试用例&#xff08;T1, T2,...,TM&#xff09;&#xff0c;每个用例…