【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 类型。


相关推荐
zcmodeltech13 小时前
智能制造教学实训沙盘模型多系统协同控制系统设计:基于STM32与Modbus RTU的工业机器人-智慧工厂-数字孪生全场景联动方案
数据库·stm32·嵌入式硬件·机器人·制造·多分类
Java&Develop13 小时前
DeltaFStation 宝塔 Linux 部署教程
python
小柯南敲键盘13 小时前
跨境电商图片翻译工具推荐:批量AI翻译+视频字幕+智能抠图
人工智能·python·音视频
桦说编程13 小时前
盘点并发集合里那些容易误判的行为
java·后端·性能优化
AI多Agent协作实战派14 小时前
AI多Agent协作系统实战(四十):AI说“没有错误“,系统判了“测试失败“——一个正则的误判
数据库·人工智能
北斗落凡尘14 小时前
LangGraph 入门实战(8)--绑定工具
python·langchain
ningmengjing_14 小时前
MCP 通讯方式与实现指南
python·agent·mcp
淼澄研学14 小时前
Kimi API黑产倒卖技术解析与Python合规接入指南
开发语言·网络·python
何以解忧,唯有..14 小时前
Python 元组(tuple)详解:使用、遍历与排序
开发语言·python
KANGBboy14 小时前
Python eval安全隐患
开发语言·python