关于java17:从头学Java17Stream-API二结合RecordOptional
Stream APIStream API 是依照map/filter/reduce办法解决内存中数据的最佳工具。本系列教程由Record讲起,而后联合Optional,探讨collector的设计。 应用Record对不可变数据进行建模Java 语言为您提供了几种创立不可变类的办法。可能最间接的是创立一个蕴含final字段的final类。上面是此类的示例。 public final class Point { private final int x; private final int y; public Point(int x, int y) { this.x = x; this.y = y; }}编写这些元素后,须要为字段增加拜访器。您还将增加一个 toString)() 办法,可能还有一个 equals)() 以及一个 hashCode()) 办法。手写所有这些十分乏味且容易出错,侥幸的是,您的 IDE 能够为您生成这些办法。 如果须要通过网络或文件系统将此类的实例从一个应用程序传送到另一个应用程序,则还能够思考使此类可序列化。如果这样做,还要增加一些无关如何序列化的信息。JDK 为您提供了几种管制序列化的办法。 最初,您的Point类可能有一百多行,次要是IDE 生成的代码,只是为了对须要写入文件的两个整数不可变集进行建模。 Record曾经增加到 JDK 以扭转这所有。只需一行代码即可为您提供所有这些。您须要做的就是申明record的状态;其余部分由编译器为您生成。 呼叫Record声援Record可帮忙您使此代码更简略。从 Java SE 14 开始,您能够编写以下代码。 public record Point(int x, int y) {}这一行代码为您创立以下元素。 它是一个不可变的类,有两个字段:x和y它有一个规范的构造函数,用于初始化这两个字段。toString)()、equals)() 和 hashCode()) 办法是由编译器为您创立的,其默认行为与 IDE 将生成的内容绝对应。如果须要,能够通过增加本人的实现来批改此行为。它能够实现Serializable接口,以便您能够通过网络或通过文件系统发送到其余应用程序。序列化和反序列化record的形式遵循本教程开端介绍的一些非凡规定。record使创立不可变的数据集变得更加简略,无需任何 IDE 的帮忙。升高了谬误的危险,因为每次批改record的组件时,编译器都会自动更新 equals()) 和 hashCode()) 办法。 ...