在本文中,我们将介绍Java 8教程。
我已经写了很多关于Java 8的教程。这是所有Java 8帖子的索引帖子。
爪哇 8具有许多新功能,这些新功能将改变您进行编程的方式。这是使用Java 8编程需要了解的功能列表。
Lambda表达式
Lambda表达式表示可以传递的匿名函数。 Lambda表达式没有名称,但是具有参数,主体和返回类型。
lambda表达式的基本语法如下:
or
(parameters) -> { statements; }
如您所见,如果您有多个语句,则需要大括号。
功能界面
功能界面是 接口 只能有一个抽象方法。
功能接口和lambda表达式齐头并进。您可以为函数接口编写lambda表达式。
For example:
可运行 interface
1 2 3 4 5 | 上市 接口 可运行 { 上市 抽象 虚空 跑(); } |
接口中的默认方法
爪哇 8在接口中引入了许多新方法,但是它可能会破坏旧版本的代码。如果任何类未实现接口’s方法,则给出编译错误。为了解决此问题,Java 8引入了默认方法。听起来可能令人惊讶,但接口也可以包含实现代码。您可以在界面中声明默认方法,它将成功’强制客户端实施默认方法。
For example:
reversed()是Comparator界面中的默认方法。
接口中的静态方法
与默认方法类似,您也可以在界面中使用静态方法。
For example:
naturalOrder()是Comparator接口中的静态方法。
可选的
爪哇 8可选可以用来避免NullPointerException。我已经编写了详细的Java 8可选教程。
流API
流是Java 8的最大新增功能之一。StreamAPI可帮助您以类似于SQL查询的声明性方式处理数据。
For example:
Let’s说您想过滤年龄大于30岁的员工并创建姓名列表。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 包 组织.Arpit.爪哇2blog; 上市 类 雇员 { 私人的 串 名称; 私人的 整型 年龄; 上市 雇员(串 名称, 整型 年龄) { 超(); 这个.名称 = 名称; 这个.年龄 = 年龄; } 上市 串 getName() { 返回 名称; } 上市 虚空 setName(串 名称) { 这个.名称 = 名称; } 上市 整型 getAge() { 返回 年龄; } 上市 虚空 setAge(整型 年龄) { 这个.年龄 = 年龄; } } |
建立课程"EmployeeMain"它将同时使用常规和Java 8’s流到员工的文件管理器列表。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | 包 组织.Arpit.爪哇2blog; 进口 爪哇.实用程序.数组列表; 进口 爪哇.实用程序.清单; 进口 爪哇.实用程序.可选的; 进口 爪哇.实用程序.流.收藏家; 上市 类 员工主要 { 上市 静态的 虚空 主要(串[] args) { 清单<雇员> 员工名单 = createEmployeeList(); 清单<串> 过滤EmployeeByAge = 过滤EmployeeByAge(员工名单); 系统.出.打印(“使用常规方法过滤的员工列表:”); 对于 (串 员工姓名:过滤EmployeeByAge) { 系统.出.打印(员工姓名); } 系统.出.打印(“ ===============================”); 系统.出.打印(“使用流过滤的员工列表:”); 清单<串> 过滤EmployeeByAgeWithStream = 过滤EmployeeByAgeWithStream(员工名单); 对于 (串 员工姓名:过滤EmployeeByAgeWithStream) { 系统.出.打印(员工姓名); } } 上市 静态的 清单<串> 过滤EmployeeByAge(清单<雇员> 员工名单) { //使用常规方式 清单<串> employeeFilteredList=新 数组列表<>(); 对于(雇员 e:员工名单) { 如果(e.getAge()>20) { employeeFilteredList.加(e.getName()); } } 返回 employeeFilteredList; } 上市 静态的 清单<串> 过滤EmployeeByAgeWithStream(清单<雇员> 员工名单) { //使用Java 8 Stream 清单<串> employeeFilteredList = 员工名单.流() .过滤(e->e.getAge()>20) .地图(雇员:: getName) .收藏(收藏家.到清单()); 返回 employeeFilteredList; } 上市 静态的 清单<雇员> createEmployeeList() { 清单<雇员> 员工名单=新 数组列表<>(); 雇员 e1=新 雇员(“约翰”,21); 雇员 e2=新 雇员(“马丁”,19); 雇员 e3=新 雇员(“玛丽”,31); 雇员 e4=新 雇员(“斯蒂芬”,18); 雇员 e5=新 雇员(加里,26); 员工名单.加(e1); 员工名单.加(e2); 员工名单.加(e3); 员工名单.加(e4); 员工名单.加(e5); 返回 员工名单; } } |
当您在程序上方运行时,将获得以下输出
John
Mary
Gary
===============================
使用Stream过滤的员工列表:
John
Mary
Gary
如您所见,Stream可以帮助您以简洁的方式编写代码。
爪哇 8日期/时间
爪哇 8引入了新的日期和时间API。涵盖了我们使用了很长时间的Date和Calendar API的所有缺陷。
Let’看到了一些新的API类。
本地日期
本地日期类仅表示日期。没有时间或时区信息。
1 2 3 4 5 6 | 本地日期 localDate=本地日期.现在(); 系统.出.打印(“年: ”+localDate.getYear()); 系统.出.打印(“月份:”+localDate.getMonth()); 系统.出.打印(“天:”+localDate.getDayOfMonth()); |
输出:
Month: MAY
Day:20
当地时间
本地日期类仅表示时间。没有日期或时区信息。
1 2 3 4 5 6 | 本地日期 localDate=本地日期.现在(); 系统.出.打印(“年: ”+localDate.getYear()); 系统.出.打印(“月份:”+localDate.getMonth()); 系统.出.打印(“天:”+localDate.getDayOfMonth()); |
输出:
Minute: 32
Second:54
本地日期Time
本地日期Time类代表日期和时间。没有时区信息。
1 2 3 4 5 6 7 8 9 | 本地日期Time localDateTime = 本地日期Time.现在(); 系统.出.打印(“年: ”+localDateTime.getYear()); 系统.出.打印(“月份:”+localDateTime.getMonth()); 系统.出.打印(“天:”+localDateTime.getDayOfMonth()); 系统.出.打印(“小时:”+localDateTime.getHour()); 系统.出.打印(“分钟:”+localDateTime.getMinute()); 系统.出.打印(“第二:”+localDateTime.getSecond()); |
输出:
Month: MAY
Day:20
Hour: 0
Minute: 35
Second:40
瞬间
瞬间类用于表示Java中的时间戳。您可以在Instant上执行加号,减号和其他各种操作。
1 2 3 4 5 6 | 瞬间 实例1 = 瞬间.现在(); 瞬间 实例2=实例1.加秒(5); 系统.出.打印(“即时1:”+ 实例1); 系统.出.打印(“即时2:”+ 实例2); |
输出:
即时2:2018-05-19T19:10:28.540064Z
持续时间
持续时间类别表示两个瞬间之间的时间间隔(以秒或毫秒为单位)。
1 2 3 4 5 6 7 | 瞬间 开始 = 瞬间.解析(“ 2018-10-13T11:15:35.00Z”); 瞬间 结束 = 瞬间.解析(“ 2018-10-13T11:16:35.00Z”); 持续时间 持续时间 = 持续时间.之间(开始, 结束); 系统.出.打印(“持续时间(以秒为单位):”+持续时间.getSeconds()); |
输出:
那’关于Java 8教程的全部内容。
不错的帖子,易于阅读和理解。
关于在Java 8中修复Interface静态方法的链接,我只有一条评论。
非常感谢