面试反杀 | 请谈谈Java8-18引入的新特性(三)

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第8天,点击查看活动详情

Java8于2014年3月18日发布,截止到2022年4月6日,当前最新发行版本是Java18。版本17、11和8是目前支持的长期支持(LTS)版本。这篇文章带领大家回顾从Java 8 开始每个版本的特性,小板凳坐好,发车了!想看上一篇文章,点击这儿面试反杀 | 请谈谈Java8-18引入的新特性(二)

Java 12 新特性

Compact Number Formatting

Java12带来了一个新的数字格式化程序—— CompactNumberFormat。它被设计成基于给定地区提供的模式,以较短的形式表示一个数字。

我们可以通过 NumberFormat 类中的 getCompactNumberInstance 方法获得它的实例:

public static NumberFormat getCompactNumberInstance(Locale locale, NumberFormat.Style formatStyle)
复制代码

如前所述,locale 参数负责提供适当的格式模式。格式样式可以是 SHORT 或 LONG。为了更好地理解格式样式,让我们考虑一下美国地区的1000。SHORT 样式将格式化为“10K”,LONG 样式将格式化为“10000”。

现在让我们来看一个例子,“在文章中获得赞的数量”,然后使用两种不同的样式进行压缩:

@Test
public void givenNumber_thenCompactValues() {
    NumberFormat likesShort = 
      NumberFormat.getCompactNumberInstance(new Locale("en", "US"), NumberFormat.Style.SHORT);
    likesShort.setMaximumFractionDigits(2);
    assertEquals("2.59K", likesShort.format(2592));
​
    NumberFormat likesLong = 
      NumberFormat.getCompactNumberInstance(new Locale("en", "US"), NumberFormat.Style.LONG);
    likesLong.setMaximumFractionDigits(2);
    assertEquals("2.59 thousand", likesLong.format(2592));
}
复制代码

pattern matching for instanceof

Java 12中引入的另一个预览功能是 instanceof 模式匹配。

在以前的 Java 版本中,当使用 if 语句和 instanceof 时,我们必须显式地对对象进行类型转换以访问其特性:

Object obj = "Hello World!";
if (obj instanceof String) {
    String s = (String) obj;
    int length = s.length();
}
复制代码

使用 Java 12,我们可以直接在语句中声明这个新的类型化变量:

if (obj instanceof String s) {
    int length = s.length();
}
复制代码

String Class New Methods

Java 12在 String 类中提供了两个新方法。

首先是字符串缩进根据整数参数调整每一行的缩进。如果参数大于零,则将在每行的开头插入新的空格。另一方面,如果参数小于零,则从每一行的请求中删除空格。如果给定行不包含足够的空白,则删除所有前导空白字符。

现在,让我们看一个基本的例子。首先,我们将文本缩进为四个空格,然后删除整个缩进:

String text = "Hello world!\nThis is Java.";
​
text = text.indent(4);
System.out.println(text);
​
text = text.indent(-10);
System.out.println(text);
复制代码

输出如下:

    Hello world!
    This is Java.
​
Hello world!
This is Java.
复制代码

需要注意的是,即使我们通过了 value-10(超过了缩进计数) ,也只有空格受到影响,其它字符完好无损。

第二个新方法是变换,它接受一个单参数函数作为将应用于字符串的参数。

举一个简单的例子,让我们使用 transform 方法来还原字符串:

@Test
public void givenString_thenRevertValue() {
    String text = "Baeldung";
    String transformed = text.transform(value ->
      new StringBuilder(value).reverse().toString()
    );
​
    assertEquals("gnudleaB", transformed);
}
复制代码

当然还有其它的新特性,包括但不限于:

  • File::mismatch in the nio.file.Files utility class
  • Teeing Collector
  • Preview Changes
  • JVM Changes

未完待续,下面继续讲各个版本的新特性,敬请期待!

猜你喜欢

转载自juejin.im/post/7083992742069534757