Java8介绍
Java 8
Java 8 把函数式编程里的一些思想融入到 Java 的语法中,让我们可以用更少的时间写出高效的代码。
Java 8的优势:
- 代码行更少
- Lambda表达式
- Stream API
- 便于并行
- 减少空指针
- JVM优化
- 兼容老版本
Lambda
Lambda表达式是一段可以传递的代码,它的核心思想是将面向对象中的传递数据变成传递行为。
基础语法
expression = (variable) -> action
- variable:这是一个变量,一个占位符,也可是多个变量
- action:实现代码的逻辑部分,它可以是一行代码也可以是一个代码片段
当一个动作实现无法用一行代码完成,可以编写一段代码用{}
包裹起来。
函数式接口
函数式接口是只有一个方法的接口,用作Lambda表达式的类型。
函数式接口:输入一个人的年龄,判断这个人是否成年
package org.example;public class FunctionInterfaceDemo {@FunctionalInterfaceinterface Predicate<T> {boolean test(T t);}public static boolean doPredicate(int age, Predicate<Integer> predicate) {return predicate.test(age);}public static void main(String[] args) {boolean isAdult = doPredicate(20, x -> x >= 18);System.out.println(isAdult);}
}
实际上诸如上述例子中的接口,JDK中有java.util.function包
接口 | 参数 | 返回值 | 类别 |
---|---|---|---|
Consumer | T | void | 消费型接口 |
Supplier | None | T | 供给型接口 |
Function | T | R | 函数型接口 |
Predicate | T | Boolean | 断言型接口 |
Stream API
Stream是Java8中处理集合的抽象概念,它可以指定你希望对集合的操作,但是执行操作的时间交给具体实现来决定。
Stream提供了对集合操作的增强,极大的提高了操作集合对象的便利性。
java.util.stream.Stream中定义了许多流操作的方法。
流操作其实可以分为两类:处理操作、聚合操作
- 处理操作:诸如filter、map等处理操作将Stream一层一层的进行抽离,返回一个流给下一层使用
- 聚合操作:从最后一次流中生成一个结果给调用方,foreach只做处理不做返回
filter:筛选数据时用到,参数是Predicate<T> predicate
map:将流中处理的数据类型进行转换,可以将流中的值转换为一个新的流
flatMap:用于提取子流的操作
max和min:查找Stream中的最大或最小元素
收集结果:调用Stream中的collect方法
日期和时间
新的日期API
- ZoneId:时区ID,用来确定Instant和LocalDateTime相互转换的规则
- Instant:用来表示时间线上的一个点
- LocalDate:表示没有时区的日期,不可变且线程安全
- LocalTime:表示没有时区的时间,不可变且线程安全
- LocalDateTime:表示没有时区的日期时间,不可变且线程安全
- Clock:用于访问当前时刻、日期、时间,用到时区
- Duration:用秒和纳秒表示时间的数量
package org.example;import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;public class LocalDateTest {public static void main(String[] args) {// 获取当前日期LocalDate localDate = LocalDate.now();System.out.println(localDate);// 添加一天LocalDate tomorrow = localDate.plusDays(1);// 减去一个月LocalDate prevMonth = localDate.minus(1, ChronoUnit.MONTHS);// 判断闰年boolean leapYear = localDate.isLeapYear();System.out.println("是否闰年:" + leapYear);// 获取星期DayOfWeek week = localDate.getDayOfWeek();System.out.println(week);}
}
package org.example;import java.time.LocalTime;public class LocalTimeTest {public static void main(String[] args) {// 当前时间LocalTime now = LocalTime.now();System.out.println(now);// 添加一个小时LocalTime nextHour = now.plusHours(1);System.out.println(nextHour);// 获取小时和分钟int hour = now.getHour();System.out.println("小时:" + hour);int minute = now.getMinute();System.out.println("分钟:" + minute);}
}
日期格式化
package org.example;import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;public class DateTimeFormatterTest {public static void main(String[] args) {LocalDateTime now = LocalDateTime.now();DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");System.out.println(now);System.out.println(now.format(dateTimeFormatter));}
}
文件读写操作
package org.example;import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;public class FilesTest {public static void main(String[] args) throws IOException {// 使用Files类快速实现文件读写操作// 写文件Files.write(Paths.get("test.txt"), "Hello Java\nHello World".getBytes(StandardCharsets.UTF_8));// 读文件byte[] data = Files.readAllBytes(Paths.get("test.txt"));String content = new String(data, StandardCharsets.UTF_8);System.out.println(content);// 按照行读取List<String> lines = Files.readAllLines(Paths.get("test.txt"));System.out.println(lines);}
}
参考资料
跟上Java8 - 带你实战Java8
Java8-explorer
30 seconds of java8
相关文章:
Java8介绍
Java 8 Java 8 把函数式编程里的一些思想融入到 Java 的语法中,让我们可以用更少的时间写出高效的代码。 Java 8的优势: 代码行更少Lambda表达式Stream API便于并行减少空指针JVM优化兼容老版本 Lambda Lambda表达式是一段可以传递的代码࿰…...
Java 基准测试
Java 基准测试maven依赖简单使用执行多个函数BenchmarkMode(Mode.AverageTime) 运行模式OutputTimeUnit(TimeUnit.NANOSECONDS) 报告结果时间单位Warmup(iterations 5,time 1,timeUnit TimeUnit.SECONDS) 预热参数Measurement(iterations 5,time 1,timeUnit TimeUnit.SEC…...
普通护照出国免签及落地签国家和地区
1.互免签协议的国家(双向免签) 序号 协议国 限制条件 生效日期 1 阿联酋 停留不超过30天 2018.01.16 2 巴巴多斯 停留不超过30天 2017.06.01 3 巴哈马 停留不超过30天 2014.02.12 4 白俄罗斯 停留不超过30天 2018.8.10 5 波黑 停留不超…...

20230219 质心和重心的区别和性质
质心:(无需重力场的前提)所有质点的位置关于它们的质量的加权平均数。 重心:(需要重力场的前提)重力对系统中每个质点关于重心的力矩之和为零。 质心: xˉ∑i1nmixi∑i1nmi,yˉ∑i1nmiyi∑i1nmi…...

maven多环境配置
maven多环境配置 参考网址: https://mp.weixin.qq.com/s/-e74bd2wW_RLx7i4YF5M2w https://mp.weixin.qq.com/s/3p53kBHqys58QdMme6lR4A 项目地址 https://gitee.com/shao_ming314/maven-profile-dir 项目说明 该项目基于目录进行多环境配置 , 具体的配置文件在 src/resource…...

设计模式之中介模式与解释器模式详解和应用
目录1 中介模式详解1.1 中介模式的定义1.1.1 中介者模式在生活场景中应用1.1.2 中介者模式的使用场景1.2 中介模式的通用实现1.2.1 类图设计1.2.2 代码实现1.3 中介模式应用案例之聊天室1.3.1 类图设计1.3.2 代码实现1.4 中介者模式在源码中应用1.4.1 jdk中Timer类1.5 中介者模…...
2023年全国最新交安安全员精选真题及答案1
百分百题库提供交安安全员考试试题、交安安全员考试预测题、交安安全员考试真题、交安安全员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 一、单选题: 1.对施工组织设计中的安全技术措施或者专项施工方案是否…...
chrome插件开发备忘录
文章目录前言要点通信方式注意事项参考前言 第一次接触到插件开发,起因是我用了十多年的一键上传需要升级了。之前的版本来自于有道云,是通过在书签栏加一个书签,然后将上传功能注入到当前页面的方式来实现的。一直也用得挺好,挺…...

实例1:控制树莓派板载LED灯闪烁
实例1:控制树莓派板载LED灯闪烁 实验目的 通过背景知识学习,了解四足机器人mini pupper搭载的微型控制计算机:树莓派。通过对树莓派板载LED灯的状态读写控制,熟悉树莓派本身的操作及Linux中文件的读写。掌握常见函数time.sleep(…...
华为OD机试题 - 最大排列(JavaScript)
最近更新的博客 华为OD机试题 - 字符串加密(JavaScript) 华为OD机试题 - 字母消消乐(JavaScript) 华为OD机试题 - 字母计数(JavaScript) 华为OD机试题 - 整数分解(JavaScript) 华为OD机试题 - 单词反转(JavaScript) 使用说明 参加华为od机试,一定要注意不要完全背…...

手动创建 vue2 ssr 开发环境
本文和个人博客同步发表 更多优质文章查看个人博客 前言 手动搭建 vue ssr 一直是一些前端开发者的噩梦,因为其中牵扯到很多依赖包之间的配置以及webpack在node中的使用。就拿webpack配置来说,很多前端开发者还是喜欢用webpack-cli脚手架搭建项目。导致…...
RHCE-操作系统刻录工具
Windows 1.准备材料。 一个可用的windows操作系统(下载的时候用迅雷比较快) MSDN, 我告诉你 - 做一个安静的工具站 大于等于8G的U盘 想要安装的系统光盘镜像 U盘烧录工具(软碟通) UltraISO软碟通中文官方网站 - 光盘映像文件制作/编辑/转换工具 …...

PHP面向对象01:面向对象基础
PHP面向对象01:面向对象基础一、关键字说明二、技术实现1. 定义类2. 类成员三、 访问修饰限定符1. public2. protected3. private4. 空修饰限定符四、类内部对象五、构造和析构1. 构造方法2. 析构方法六、范围解析操作符1. 访问类常量2. 静态成员3. self关键字七、类…...

《爆肝整理》保姆级系列教程python接口自动化(十八)--重定向(Location)(详解)
简介 在实际工作中,有些接口请求完以后会重定向到别的url,而你却需要重定向前的url。URL主要是针对虚拟空间而言,因为不是自己独立管理的服务器,所以无法正常进行常规的操作。但是自己又不希望通过主域名的二级目录进行访问&…...
MySQL的索引、视图
什么是索引模式(schema)中的一个数据库对象 在数据库中用来加速对表的查询 通过使用快速路径访问方法快速定位数据,减少了磁盘的I/O 与表独立存放,但不能独立存在,必须属于某个表 由数据库自动维护,表被删除时,该表上的索引自动被…...

【JavaWeb】网络层协议——IP协议
目录 IP协议结构 IP地址管理 特殊IP 解决IP地址不够用 动态分配IP地址 NAT网络地址转换 IPV6 IP协议结构 版本:就是IP协议的版本号。目前只有 4 和 6。这里介绍的是IPV4 首部长度:单位是4字节。于TCP首部长度完全一致,也是可变的&…...
【Python学习笔记】41.Python3 多线程
前言 本章介绍Python的多线程。 Python3 多线程 多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长时间的程序中的任务放到后台去处理。用户界面可以更加吸引人,比如用户点击了一个按钮去触发某些事件的处理…...

Windows 版本ffmpeg编译概述
在使用ffmpeg过程当中,ffmpeg在Linux(包括mac,android)编译非常容易,直接configure,make即可,Android需要交叉编译,在windows就比较麻烦,庆幸的是ffmpeg官方提供已编译好Windows版本的二进制库(http://ffmpeg.org/download.html#b…...

NETCore下CI/CD之自动化测试 (详解篇)
NETCore下CI/CD之自动化测试 (详解篇) 目录:导读 前言 安装JDK 安装 Tomcat 首先,我们需要指定 Tomcat.PID 进程文件,进入 /usr/local/tomcat/bin,编辑文件 增加 tomcat 账户并赋予权限 防止Jeknins…...
Hoeffding不等式剪枝方法
在基于物品的协通过滤算法中,当用户历史行为数据有很多时,对计算会有很大挑战,对此可以使用剪枝对数据进行化简来达到减少计算量。 不是每个物品对都需要进行增量计算。对于两个物品的相似度,每次更新都能够得到一个新的相…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...

微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...

Vue ③-生命周期 || 脚手架
生命周期 思考:什么时候可以发送初始化渲染请求?(越早越好) 什么时候可以开始操作dom?(至少dom得渲染出来) Vue生命周期: 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...