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


相关推荐
奔跑吧邓邓子22 分钟前
【Python爬虫(12)】正则表达式:Python爬虫的进阶利刃
爬虫·python·正则表达式·进阶·高级
码界筑梦坊1 小时前
基于Flask的京东商品信息可视化分析系统的设计与实现
大数据·python·信息可视化·flask·毕业设计
pianmian11 小时前
python绘图之箱型图
python·信息可视化·数据分析
余衫马1 小时前
CentOS7 离线安装 Postgresql 指南
数据库·postgresql
csbDD1 小时前
2025年网络安全(黑客技术)三个月自学手册
linux·网络·python·安全·web安全
E___V___E1 小时前
MySQL数据库入门到大蛇尚硅谷宋红康老师笔记 高级篇 part 2
数据库·笔记·mysql
m0_748254882 小时前
mysql之如何获知版本
数据库·mysql
yngsqq2 小时前
c# —— StringBuilder 类
java·开发语言
mikey棒棒棒2 小时前
Redis——优惠券秒杀问题(分布式id、一人多单超卖、乐悲锁、CAS、分布式锁、Redisson)
数据库·redis·lua·redisson·watchdog·cas·并发锁
赔罪3 小时前
Python 高级特性-切片
开发语言·python