Java 12的新特性

发布时间:2021-05-21 15:03
最后更新:2021-05-21 15:03
所属分类:
JVM Java

Java 12也是两个LTS版之间的小进化版本,这个版本带来的变化也主要集中在优化开发者体验上。

本系列的文章有:

  1. Java 8的新特性
  2. Java 9的新特性
  3. Java 10的新特性
  4. Java 11的新特性
  5. Java 12的新特性
  6. Java 13的新特性
  7. Java 14的新特性
  8. Java 15的新特性
  9. Java 16的新特性
  10. Java 17的新特性
  11. Java 18的新特性
  12. Java 19的新特性
  13. Java 20的新特性
  14. Java 21的新特性

新字符串方法

String类新增了两个方法:.indent().transform()

.indent()方法可以为字符串中的每一行增加或减少缩进。这个方法可以接受一个整型值作为参数,如果参数值为正值,那么所有行的缩进将增加指定数量的空格;如果参数值为负值,那么所有行的缩进将减少指定数量的空格。.indent()方法只影响每行前的空格,不会影响其他字符。

.transform()方法可以接受一个Function<String, String>类型的参数,主要用于对指定的字符串进行变换。

文件差异比较

Java 12在java.nio.file.Files工具类中提供了一个名为.mismatch()的方法。这个方法接受两个Path类型的值作为参数,会返回这两个Path所指代的内容中出现的第一处不一致的字节位置。如果两个文件是一样的,那么这个方法将返回-1

Stream合并收集器

合并收集器主要是用来把一个Stream的两个Collector合并在一起,形成一个集合。这个合并收集器的名字很简单,就叫.teeing()。这个方法的签名如下。

1
2
3
4
5
Collector<T, ?, R> teeing(
    Collector<? super T, ?, R1> downStream1,
    Collector<? super T, ?, R2> downStream2,
    BiFunction<? super R1, ? super R2, R> merger
)

这里给出一个简单的使用示例。

1
2
3
4
5
6
double mean = Stream.of(1, 2, 3, 4, 5)
    .collect(Collectors.teeing(
        Collectors.summingDouble(i -> i),
        Collectors.counting(),
        (sum, count) -> sum / count
    ));

在这个示例中,第一个Collector将被用来对所有的数据进行加和,第二个则用来计算Stream中元素的数量,最后的合并方法则是将两个Collector得到的结果进行进一步处理得到平均值。

压缩数字格式

压缩数字格式的意思就是使用2.9K表示2900,或者使用2.9 thousand表示2900之类的数字格式。但是需要注意,不同的Locale输出的数字格式是不一样的。压缩数字格式是在java.text.NumberFormat类中提供的,可以使用静态方法.getCompactNumberFormatInstance()获取,之后的操作便如NumberFormat的其他实例一样了。

预览版功能

Java 12带来了一票预览版功能,但是这些功能默认是不能够使用的,如果要使用这些功能,需要在编译时使用选项--enable-preview来启用。由于这些功能还处于预览版,所以在项目中并不建议启用,本文也暂时不再对其展开描述。

这些预览版功能有:

  • switch现在可以使用新语法了,并且不再是一个语句,而是一个拥有值的表达式。
  • instanceOf操作符现在不仅可以断言类型,还可以在断言为真的时候直接声明一个完成了类型转换的变量。
  • 引入了一个实验性的GC:Shenandoah。

索引标签
JVM
Java
Java 12
字符串
集合转换
数字格式化