Java12新特性及代码示例

file

Java 12(2019 年 3 月 19 日发布)是可用于 JDK 的最新版本。让我们看看它为开发人员和架构师带来的新功能和改进。

1. Stream API 中的 Collectors.teeing()

teeing 收集器已公开为静态方法Collectors::teeing。该收集器将其输入转发给其他两个收集器,然后将它们的结果与函数合并。

teeing(Collector, Collector, BiFunction)接受两个收集器和一个合并其结果的函数。传递给结果收集器的每个元素都由两个下游收集器处理,然后使用指定的合并函数将它们的结果合并到最终结果中。

例如,在给定的员工列表中,如果我们想找出最高薪水和最低薪水的员工,我们可以使用 teeing collector 在单个语句中完成。

SalaryRange salaryRange = Stream
            .of(56700, 67600, 45200, 120000, 77600, 85000)
            .collect(teeing(
                    minBy(Integer::compareTo), 
                    maxBy(Integer::compareTo), 
                    SalaryRange::fromOptional));

2. 字符串 API 变更

2.1 字符串缩进

indent 方法有助于更改字符串的缩进。我们可以传递正值或负值,具体取决于我们是要添加更多空格还是删除现有空格。

String result = "foo\nbar\nbar2".indent(4);
System.out.println(result)
//    foo
//    bar
//    bar2

2.2. transform()

字符串转换方法,看代码:

List<String> names = List.of(
                  "   Alex",
                  "brian");
 
List<String> transformedNames = new ArrayList<>();
 
for (String name : names) {
    String transformedName = name.transform(String::strip)
                      .transform(StringUtils::toCamelCase);
    transformedNames.add(transformedName);
}

2.3. 字符串常量

从 Java 12 开始,String类实现了两个额外的接口java.lang.constant.Constablejava.lang.constant.ConstantDesc

String类还引入了两个额外的低级方法describeConstable()resolveConstantDesc(MethodHandles.Lookup).

它们是低级 API,用于提供字节码解析和生成功能的库和工具,例如 Byte Buddy。

请注意,Constable类型是其值是可以在 Java 类文件的常量池中表示的常量,如JVMS 4.4中所述,并且其实例可以名义上将自己描述为ConstantDesc.

resolveConstantDesc()与此类似,describeConstable()不同之处在于此方法返回的是 C 的实例onstantDesc

3. Files.mismatch(path, path)

有时,我们想确定两个文件是否具有相同的内容。此 API 有助于比较文件的内容。

mismatch()方法比较两个文件路径并返回一个long值。long 表示两个文件内容中第一个不匹配字节的位置。'–1'如果文件“相等”,则返回值。

Path helloworld1 = tempDir.resolve("helloworld1.txt"); 
Path helloworld2 = tempDir.resolve("helloworld2.txt");
long diff = Files.mismatch(helloworld1, helloworld2); 

4.紧凑数字格式

由用户界面或命令行工具呈现的大量数字总是难以解析。使用数字的缩写形式更为常见。紧凑的数字表示更容易阅读并且在屏幕上需要更少的空间而不会失去原始含义。

例如3.6 M3,600,000更容易阅读。

Java 12 引入了一种名为NumberFormat.getCompactNumberInstance(Locale, NumberFormat.Style)的便捷方法,用于创建紧凑的数字表示。

NumberFormat formatter = NumberFormat.getCompactNumberInstance(Locale.US,``                 ``NumberFormat.Style.SHORT);` `String formattedString = formatter.format(25000L);  ``//25K

5. 支持 Unicode 11

在表情符号在社交媒体渠道交流中发挥关键作用的时代,支持最新的 Unicode 规范比以往任何时候都更加重要。Java 12 保持同步并支持 Unicode 11。

Unicode 11 增加了 684 个字符,总共 137,374 个字符 - 以及 7 个新脚本,总共 146 个脚本。

6.切换表达式(预览)

此更改扩展了switch 语句以便它可以用作语句或表达式。

不必为break每个 case 块定义一个语句,我们可以简单地使用箭头语法。箭头语法在语义上看起来像一个 lambda,并将 case 标签与表达式分开。

使用新的 switch 表达式,我们可以直接将 switch 语句分配给变量。

boolean isWeekend = switch (day) {
  case MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY -> false; 
  case SATURDAY, SUNDAY -> true;
  default -> throw new IllegalStateException("Illegal day entry :: " + day);
};
 
System.out.println(isWeekend);  //true or false - based on current day

要使用此预览功能,我们必须在应用程序启动期间使用–enable-preview标志明确指示 JVM。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,794评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,050评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,587评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,861评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,901评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,898评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,832评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,617评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,077评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,349评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,483评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,199评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,824评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,442评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,632评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,474评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,393评论 2 352

推荐阅读更多精彩内容