Java 16 新特性介绍

本文要点
Java 16 和即将发布的 Java 17 引入了大量特性和语言增强,有助于提高开发人员的生产力和应用程序性能
Java 16 Stream API 为常用的终端操作提供了很多新方法,有助于减少样板代码的混乱现象
Record 是 Java 16 中的一项语言新特性,可简洁地定义纯数据类。编译器提供了构造器、访问器和一些常见 Object 方法的实现
模式匹配是 Java 16 中的另一个新特性,它简化了使用 instanceof 代码块完成的显式和冗长的转换,此外还有很多好处
Java 16 于 2021 年 3 月发布,版本类型是可用于生产的 GA 构建,我在这段深度视频演示中介绍了该版本的新特性。下一个 LTS 版本 Java 17 计划于今年 9 月发布。Java 17 将包含许多改进和语言增强,其中大部分是自 Java 11 以来交付的所有新特性和更改的成果结晶。

就 Java 16 中的新特性而言,我将分享 Stream API 中一项讨喜的更新,然后主要关注语言更改部分。

从 Stream 到 List
List features =
Stream.of(“Records”, “Pattern Matching”, “Sealed Classes”)
.map(String::toLowerCase)
.filter(s -> s.contains(" "))
.collect(Collectors.toList());
复制代码

如果你习惯使用 Java Stream API,那么应该会很熟悉上面这个代码段。

这段代码里有一个包含一些字符串的流。我们在它上面映射一个函数,然后过滤这个流。

最后,我们将流物化为一个列表。

如你所见,我们通常会调用终端操作 collect 并给它传递一个收集器。

这里是很常见的实践——使用 collect 并将 Collectors.toList()传递给它,感觉就像是样板代码一样。

好消息是,在 Java 16 中 Stream API 中添加了一个新方法,使我们能够立即将 toList()作为一个流的一个终端操作来调用。

List features =
Stream.of(“Records”, “Pattern Matching”, “Sealed Classes”)
.map(String::toLowerCase)
.filter(s -> s.contains(" "))
.toList();
复制代码

在上面的代码中使用这个新方法会生成一个来自这个流,且包含一个空格的字符串的列表。请注意,我们返回的这个列表是一个不可修改的列表。这意味着你不能再从这个终端操作返回的列表中添加或删除任何元素。如果要将流收集到一个可变列表中,则必须继续使用一个带有 collect()函数的收集器。所以这个 Java 16 中新引入的 toList()方法真的很讨喜。这个更新应该能让流管道代码块读起来更容易一些。

Stream API 的另一个更新是 mapMulti()方法。它的用途有点像 flatMap()方法。如果你平常用的是 flatMap(),并且映射到 lambda 中的内部流并传递给它,那么 mapMulti()为你提供了一种替代方法,你可以将元素推送给一个消费者。我不会在本文中具体介绍这个方法,因为我想讨论的是 Java 16 中的语言新特性。如果你有兴趣进一步了解 mapMulti(),我强烈建议你查看Java文档中关于这种方法的介绍。

Records
Java 16 中引入的第一个重大语言特性称为记录(records)。记录用来将数据表示为 Java 代码中的数据,而不是任意类。在 Java 16 之前,有时我们只是需要表示一些数据,最终却得到了一个任意类,如下面的代码段所示。

public class Product {
private String name;
private String vendor;
Private int price;
private boolean inStock;
}
复制代码

这里我们有一个 Product 类,它有四个成员。定义这个类所需的所有信息应该就是这些了。当然,我们需要更多的代码来完成这项工作。例如,我们需要有一个构造器。我们需要有相应的 getter 方法来获取成员的值。为了补充完整,我们还需要有与我们定义的成员一致的 equals()、hashCode()和 toString()实现。一些样板代码可以由 IDE 生成,但这

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值