Java8新特性-并行流与串行流

并行流parallel()与串行流(顺序流) sequential()

并行流 就是把 一个内容 分成多个数据块, 并用不同的线程分别处理每个数据块的流

Optional 类

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

常用方法:

Optional.of(T t) : 创建一个Optional实例

Optional.empty(): 创建一个空的Optional实例

Optional.ofNullable(T t) : 若t 不为null ,创建 Optionnal实例,否则创建空实例

isPresent() 判断是否包含值

get() 获得对象

orElse(T t) 如果调用对象包含值, 返回该值, 否则返回t

orElseGet(Supplier s) 如果调用对象包含值, 返回该值, 否则返回s获取的值

map(Function f) 如果有值对其处理, 并返回处理后的Optional, 否则返回Optional.empty()

flatMap (Function mapper) 与map类似, 要求返回值必须是 Optional

如果一个类 的对象 作为 另一个类的属性出现, 则 以前 直接 把 该类作为属性, 这样容易出现 空指针问题

学会了 Optional后 可以

pulbic class A{

}

public class B{

private A a; // 之前这样写, 会出现 空指针异常

private Optional<A> a = Optional.empty();

}

接口中的默认方法和静态方法

java8 中允许接口中包含 具有实现的方法, 该方法为 默认方法, 默认方法使用 default 修饰

 public interface Myfunc {// 默认方法, 用default 修饰,必须有方法体default String getName(){return "abc";};​}

接口 默认方法的 "类优先" 原则

若 一个接口中 定义了一个默认方法. 而另外一个父类或接口中又定义了一个 同名方法时, 则

选择父类中的方法, 如果一个父类提供了具体的实现, 那么接口中具有相同名称和参数的默认方法会被忽略.

接口冲突: 如果一个父接口提供一个默认方法, 而并一个接口也提供了一个具有相同名称和参数列表的方法(不管方法是否 是 默认方法) , 那么必须覆盖该方法 来解决冲突

静态方法:

 public interface Myfunc {// 默认方法, 用default 修饰,必须有方法体default String getName(){return "abc";};​static void test(){​};}

测试类 可以使用 Myfunc.test() 调用

新时间与日期

LocalDate LocalTime LocalDateTime 类的实例是 不可变的对象

他们 提供了简单的日期或时间, 并不包含当前的时间信息, 也不包含与时区相关的信息

这三个的用法基本相同

LocalDateTime.now() 获取当前系统的日期时间

LocalDateTime.of(年,月,日,时,分,秒) 设置时间

plusYears(n) n年后

minusMonths(n) n月前

getYear() getMonthValue() getDayOfMonth() getHour() getMinute() getSecond()

Instant: 时间戳 (以Unix 元年: 1970年1月1日00:00:00 到某个时间 之间的毫秒数)

  @Testpublic void test(){Instant instant = Instant.now();// 默认获取UTC 时区, 不是当前时间   , 差 8个小时System.out.println(instant);//2023-09-05T08:43:37.927313900ZOffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));// 设置偏移量System.out.println(offsetDateTime);//2023-09-05T16:43:37.927313900+08:00​System.out.println(instant.toEpochMilli());// 转为毫秒数  1693903547023}​
 

Duration: 计算两个时间之间的间隔

Period: 计算两个 日期 之间的间隔

  
@Testpublic void test() throws InterruptedException {Instant i1 = Instant.now();Thread.sleep(1000);Instant i2 = Instant.now();// 获得 两个间隔的毫秒数System.out.println(Duration.between(i1, i2).toMillis());​LocalTime time1=LocalTime.now();Thread.sleep(1000);LocalTime time2=LocalTime.now();System.out.println(Duration.between(time1, time2).toMillis());}​​@Testpublic void test()  {LocalDate d1 = LocalDate.of(2023,9,4);LocalDate d2 = LocalDate.now();// 计算两个日期 相差几天System.out.println(Period.between(d1, d2).getDays());}

时间校正器:

TemporalAdjuster: 时间校正器,

TemporalAdjusters: 该类通过静态方法提供了大量的常用TemporalAdjuster的实现

  @Testpublic void test()  {LocalDateTime time = LocalDateTime.now();// 下周日是 什么时候LocalDateTime with = time.with(TemporalAdjusters.next(DayOfWeek.SUNDAY));System.out.println(time);//2023-09-06T09:11:13.835816100System.out.println(with);//2023-09-10T09:11:13.835816100​​}

时间格式化

DateTimeFormatter: 格式化 时间/日期

format()

ofPattern()

  
@Testpublic void test()  {LocalDateTime time = LocalDateTime.now();DateTimeFormatter df = DateTimeFormatter.ISO_DATE;System.out.println(time.format(df));//2023-09-06​// 自定义格式// 自定义格式DateTimeFormatter df2 = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");System.out.println(time.format(df2));//2023年09月06日 09:28:38System.out.println(df2.format(time));//2023年09月06日 09:28:38​// 将 字符串按照 格式 转为 日期String str = time.format(df2);System.out.println(time.parse(str, df2));//2023-09-06T09:28:38​}

时区

ZoneDate ZoneTime ZoneDateTime

 @Testpublic void test()  {LocalDateTime time = LocalDateTime.now(ZoneId.of("Europe/Tallinn"));System.out.println(time);//2023-09-06T05:27:46.070275400​LocalDateTime t1= LocalDateTime.now();ZonedDateTime zonedDateTime = t1.atZone(ZoneId.of("Asia/Shanghai"));System.out.println(zonedDateTime);//2023-09-06T10:29:34.575451100+08:00[Asia/Shanghai]​​}

重复注解 与类型注解

 @Repeatable()   ​类型注解:  ElementType.TYPE_PARAMETER   @Target({TYPE, FIELD, METHOD, PARAMETER, TYPE_PARAMETER})@Retention(RetentionPolicy.RUNTIME)public @interface MyAnno {String value() default "tj";}//测试类public void show(@MyAnno("abc")String name){​}​

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

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

相关文章

街机模拟游戏逆向工程(HACKROM)教程:[1]数据的存储与读取

简介 在计算机中&#xff0c;数据存储的介质一直在变化&#xff0c;从最早的穿孔纸带&#xff0c;到现在的固态硬盘。但存储的原理是一直没有变化的&#xff0c;在计算机中&#xff0c;我们所存储的数据&#xff0c;一直都是以二进制的形式被存储存在不同的介质中。 计算机用…

(十二)EEPROM的补充

文章目录 EEPROM补充篇读EEPROM补充内容写EEPROM补充内容单字节写入多字节拆成单字节写入现象 EEPROM补充篇 读EEPROM补充内容 对于上一篇博文在读EEPROM的时候&#xff0c;提到的DUMMY WRITE&#xff1a; 这里怎么理解呢&#xff1a; 大家看&#xff0c;写EEPROM的逻辑除了…

诊断服务通讯保持0X3E服务

通信保持0x3E是什么 通信保持0x3E是一种用于确保诊断服务或诊断通讯保持激活状态的机制。它通常用于汽车诊断过程中,通过周期性地发送请求帧来防止定时器发生超时,阻止自动跳转回默认会话状态。这样能够确保诊断服务或者之前激活的通信还处在激活的状态,并保持当前的非默认…

webstorm最新版 激活 成功了

使用webstorm开发工具 很完美&#xff0c;第一次用webstorm IDE 开发工具就完美的激活了&#xff0c;你也不妨试试 链接地址&#xff1a;http://mano100.cn/thread-1942-1-1.html 激活后如下

ABC336 A-E

明天F补完题就加上&#xff08;&#xff09; 放假了又能网瘾漏w 上周的abc太简单了这周的好难&#xff0c;E出了个数位dp想法以为是想复杂了结果还真是... Tasks - AtCoder Beginner Contest 336 A - Long Loong 题意&#xff1a; 输出龙的拼音&#xff0c;把o换成连续的…

Scratch优秀作品飞翔小鸟

程序说明&#xff1a;在无尽的划痕堆中飞驰而过随着你越来越多地飞进迷宫般的街区&#xff0c;平台变得越来越难。 演示视频 scratch飞翔小鸟 其实这就是一个类似像素小鸟的程序&#xff0c;只不过水管角色就地取材&#xff0c;使用scratch里面的积木图片拼成了水管&#xff0…

网站漏洞扫描 awvs 23.11下载 Acunetix Premium build 23.11 for Linux 完美版

Acunetix Premium build 23.11 for Linux 完美版 更新日志&#xff1a; 网站漏洞扫描 awvs 23.11下载 新功能 Java IAST 传感器已更新为支持 Java 17 并删除了对 AspectJWeaver 的要求对管理适用于 Docker 和 Linux 的 Acunetix On-Premises 服务的机制进行了更改&#xff0…

LabVIEW利用视频分析实现高效硬度测量

LabVIEW利用视频分析实现高效硬度测量 在材料硬度测量领域&#xff0c;自动化和高精度测试技术的需求不断上升。布氏硬度机的自动化测量系统&#xff0c;尤其是那些结合了LabVIEW视频识别和处理技术的系统&#xff0c;正日益成为行业的焦点。介绍一个使用LabVIEW软件和先进的视…

Qt框架学习 --- CTK

系列文章目录 文章目录 系列文章目录前言一、准备阶段二、使用介绍1.核心思想2.源码2.1.框架部分资源目录树2.2.框架部分源码2.3.插件部分资源目录树2.4.插件部分源码 3.文件结构4.运行效果 总结 前言 随着开发的深入&#xff0c;CTK框架还是要关注一下。了解CTK还是有必要的。…

4D 毫米波雷达:智驾普及的新路径(二)

4 4D 毫米波的技术路线探讨 4.1 前端收发模块 MMIC&#xff1a;级联、CMOS、AiP 4.1.1 设计&#xff1a;级联、单芯片、虚拟孔径 4D 毫米波雷达的技术路线主要分为三种&#xff0c;分别是多级联、级联 虚拟孔径成像技术、以及 集成芯片。&#xff08; 1 &#xff09;多级…

deepspeed 安装 Windows

目录 目录 Window下安装deepspeed 报错No module named torch._six&#xff1a; 升级安装 解决方法&#xff1a; Window下安装deepspeed pip install deepspeed0.3.16 报错No module named torch._six&#xff1a; Traceback (most recent call last): File "\\t…

一张图总结架构设计的40个黄金法则

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;很多小伙伴拿到非常优质的架构机会&#xff0c;常常找尼恩求助&#xff1a; 尼恩&#xff0c;我这边有一个部门技术负责人资深架构师的机会&#xff0c;非常难得&#xff0c; 但是有一个大厂高P在抢&#xff0…

第18课 移植FFmpeg和openCV到Android环境

要在Android下从事音视频开发&#xff0c;同样也绕不开ffmpegopencv&#xff0c;不管是初学者还是有一定经验的程序&#xff0c;面临的首要问题就是环境的搭建和库文件的编译配置等问题&#xff0c;特别是初学者&#xff0c;往往会在实际开发前浪费大量的时间来编译ffmpeg及ope…

【Java 设计模式】设计原则之里氏替换原则

文章目录 1. 定义2. 好处3. 应用4. 示例结语 在软件开发中&#xff0c;设计原则是创建灵活、可维护和可扩展软件的基础。 这些原则为我们提供了指导方针&#xff0c;帮助我们构建高质量、易理解的代码。 ✨单一职责原则&#xff08;SRP&#xff09; ✨开放/封闭原则&#xff08…

【前后端的那些事】开源!前后端环境搭建+树形结构表格实现

文章目录 1. 前后端项目环境搭建2. table-tree2.1 后端准备2.2 前端准备 前言&#xff1a;最近写项目&#xff0c;发现了一些很有意思的功能&#xff0c;想写文章&#xff0c;录视频把这些内容记录下。但这些功能太零碎&#xff0c;如果为每个功能都单独搭建一个项目&#xff0…

py连接sqlserver数据库报错问题处理。20009

报错 pymssql模块连接sqlserver出现如下错误&#xff1a; pymssql._pymssql.OperationalError) (20009, bDB-Lib error message 20009, severity 9:\nUnable to connect: Adaptive Server is unavailable or does not exist (passwordlocalhost)\n) 解决办法&#xff1a; 打…

ES搜索的安装以及常用的增删改查操作(已经写好json文件,可以直接使用)

1.es的下载 https://www.elastic.co/cn/downloads/past-releases 2.elasticsearch安装及配置&#xff0c;遇到9200访问不了以及中文乱码&#xff0c;能访问了却要账户密码等问题 Elasticsearch启动后访问9200失败_http://localhost:9200无返回值-CSDN博客 3.开启es服务&#x…

ZZULIOJ 1112: 进制转换(函数专题)

题目描述 输入一个十进制整数n&#xff0c;输出对应的二进制整数。常用的转换方法为“除2取余&#xff0c;倒序排列”。将一个十进制数除以2&#xff0c;得到余数和商&#xff0c;将得到的商再除以2&#xff0c;依次类推&#xff0c;直到商等于0为止&#xff0c;倒取除得的余数…

C语言中关于指针的理解及用法

关于指针意思的参考&#xff1a;https://baike.baidu.com/item/%e6%8c%87%e9%92%88/2878304 指针 指针变量 地址 野指针 野指针就是指针指向的位置是不可知的&#xff08;随机的&#xff0c;不正确的&#xff0c;没有明确限制的&#xff09; 以下是导致野指针的原因 1.指针…

pytorch 通用训练代码讲解(very good)

文章目录 1. 模型训练参数设置2. 保证模型可复现性3. 设置device4 初始化模型权重及加载预训练权重4.1 初始化模型权重4.2 加载预训练权重4.3 在线下载预训练权重5 k-means 聚类anchors6 多卡同步bn及并行运行7 权重指数平滑ModelEMA7.1 EMA的原理及作用7.2 EMA的实现7.2 EMA的…