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


theme: orange

一起养成写作习惯!这是我参与「掘金日新计划 · 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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值