【Java 问题】基础—— jdk1.8 新特性

接上文

50.JDK1.8都有哪些新特性?

JDK1.8有不少新特性,我们经常接触到的新特性如下:

  • 接口默认方法:Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用default关键字修饰即可
  • Lambda 表达式和函数式接口:Lambda 表达式本质上是一段匿名内部类,也可以是一段可以传递的代码。Lambda 允许把函数作为一个方法的参数(函数作为参数传递到方法中),使用 Lambda 表达式使代码更加简洁,但是也不要滥用,否则会有可读性等问题,《Effective Java》作者 Josh Bloch 建议使用 Lambda 表达式最好不要超过3行。
  • Stream API:用函数式编程方式在集合类上进行复杂操作的工具,配合Lambda表达式可以方便的对集合进行处理。

Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数据库查询。也可以使用 Stream API 来并行执行操作。

简而言之,Stream API 提供了一种高效且易于使用的处理数据的方式。

  • 日期时间API:Java 8 引入了新的日期时间API改进了日期时间的管理。
  • Optional 类:用来解决空指针异常的问题。很久以前 Google Guava 项目引入了Optional 作为解决空指针异常的一种方式,不赞成代码被 null 检查的代码污染,期望程序员写整洁的代码。受Google Guava的鼓励,Optional 现在是Java 8库的一部分。

51.Lambda 表达式了解多少?

Lambda 表达式本质上是一段匿名内部类,也可以是一段可以传递的代码。

比如我们以前使用Runnable创建并运行线程:

这是通过内部类的方式来重写run方法,使用Lambda表达式,还可以更加简洁:

当然不是每个接口都可以缩写成 Lambda 表达式。只有那些函数式接口(Functional Interface)才能缩写成 Lambda 表示式。

所谓函数式接口(Functional Interface)就是只包含一个抽象方法的声明。针对该接口类型的所有 Lambda 表达式都会与这个抽象方法匹配。

Java8有哪些内置函数式接口?

JDK 1.8 API 包含了很多内置的函数式接口。其中就包括我们在老版本中经常见到的Comparator 和 Runnable,Java 8 为他们都添加了 @FunctionalInterface 注解,以用来支持 Lambda 表达式。

除了这两个之外,还有Callable、Predicate、Function、Supplier、Consumer等等。

52.Optional了解吗?

Optional 是用于防范 NullPointerException 。

可以将 Optional 看做是包装对象(可能是 null , 也有可能非 null )的容器。当我们定义了 一个方法,这个方法返回的对象可能是空,也有可能非空的时候,我们就可以考虑用 Optional 来包装它,这也是在 Java 8 被推荐使用的做法。

53.Stream 流用过吗?

Stream 流,简单来说,使用 java.util.Stream 对一个包含一个或多个元素的集合做各种操作。这些操作可能是 中间操作 亦或是 终端操作。 终端操作会返回一个结果,而中间操作会返回一个 Stream 流。

Stream流一般用于集合,我们对一个集合做几个常见操作:


Filter 过滤


Sorted 排序


Map 转换


Match 匹配


Count 计数

count 是一个终端操作,它能够统计 stream 流中的元素总数,返回值是 long 类型。


Reduce

Reduce 中文翻译为:减少、缩小。通过入参的 Function ,我们能够将 list 归约成一个值。它的返回类型是 Optional 类型。


相关推荐
老邓计算机毕设19 小时前
SSM学生选课系统xvbna(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·学生选课系统·ssm 框架·高校教学管理
带刺的坐椅19 小时前
Solon AI Skills 会是 Agent 的未来吗?
java·agent·langchain4j·solon-ai
jacGJ19 小时前
记录学习--文件读写
java·前端·学习
幻云201019 小时前
Python深度学习:从筑基到登仙
前端·javascript·vue.js·人工智能·python
花间相见19 小时前
【JAVA开发】—— Nginx服务器
java·开发语言·nginx
扶苏-su19 小时前
Java---Properties 类
java·开发语言
枷锁—sha19 小时前
【PortSwigger Academy】SQL 注入绕过登录 (Login Bypass)
数据库·sql·学习·安全·网络安全
仰望星空@脚踏实地20 小时前
本地Python脚本是否存在命令注入风险
python·datakit·命令注入
cypking20 小时前
四、CRUD操作指南
java
LOnghas121120 小时前
果园环境中道路与树木结构检测的YOLO11-Faster语义分割方法
python