上一篇说完了Java11,本篇接着说一下Java12.Java 12 对开发者有用的特性并不是特别多,不过实用性还是有的

字符串增强

Java 12 进一步对字符串操作进行增强,增加了两个方法。

字符串缩进

String indent(int n) 会根据参数n对字符串进行缩进。具体的规则是

  • n>0时,会在字符串的每一行开头插入n个空格,字符串整体右移。

  • n<0时,会在字符串的每一行开头删除n个空格,如果实际的空格数小于n,删除该行所有空格,但是并不会换行。

  • 如果您正在学习Spring Boot,推荐一个连载多年还在继续更新的免费教程:http://blog.didispace.com/spring-boot-learning-2x/

来实验一下:

String text = " Hello \n Java12";System.out.println("缩进前");System.out.println(text);System.out.println("右缩进俩字符");String indent2 = text.indent(2);System.out.println(indent2);System.out.println("左边缩进仨字符,但是实际只有一个空格位");String indent3 = text.indent(-3);System.out.println(indent3);

对应的结果是:

字符串缩进

字符串转换

String增加了一个transform方法,将字符串操作函数化。

<R> R transform(Function<? super String, ? extends R> f)

目的是加强字符串的函数操作。举个例子:

String txt = "hello ";// hello helloString s = txt.transform(str -> str.repeat(2));

Java的每一个版本都在加强函数式编程。

基于内容的文件匹配

Java 12 在Files工具类中增加了一个新的静态方法Files.mismatch(Path,Path),用来找两个文件内容(byte)不一样的地方,返回两个文件内容中第一个不匹配字节的位置,如果没有不匹配,则返回-1L 。

// 文件对比Path p1 = Files.createTempFile("file1", "txt");Path p2 = Files.createTempFile("file2", "txt");Files.writeString(p1, "felord.cn");Files.writeString(p2, "felord.cn");// -1L 二者内容相同long mismatch = Files.mismatch(p1, p2);

该方法和另外一个方法Files.isSameFile(Path, Path)的效果有点类似,但是还是有区别的。

另外,如果您正在学习Spring Cloud,推荐一个连载多年还在继续更新的免费教程:https://blog.didispace.com/spring-cloud-learning/

两者的差异

Collectors::teeing

对Stream流的聚合操作Collector进一步增强,增加了teeing操作来实现一些复杂的聚合操作。举个例子,我如果想统计一个数组的平均数在总和的占比,首先要计算平均数,然后再计算总和,然后再相除,这样需要三个步骤。

Double average = Stream.of(1, 2, 3, 4, 5).collect(Collectors.averagingDouble(i -> i));
Double total = Stream.of(1, 2, 3, 4, 5).collect(Collectors.summingDouble(i -> i));
Double percentage = average / total;

用了teeing之后就可以一步完成:

Double meanPercentage = Stream.of(1, 2, 3, 4, 5).collect(Collectors.teeing(Collectors.averagingDouble(i -> i),Collectors.summingDouble(i -> i),(average, total) -> average / total));

新的数字格式化

Java 12 引入了新的基于区域的紧凑型数字化格式类CompactNumberFormat,用来对长数字进行简写。通常程序员喜欢把工资区间标为10k-20k,而其它一些行业喜欢10000-20000

NumberFormat chnFormat = NumberFormat.getCompactNumberInstance(Locale.CHINA,NumberFormat.Style.SHORT);chnFormat.setMaximumFractionDigits(3);// 8.232万String cformat = chnFormat.format(82323);NumberFormat usFormat = NumberFormat.getCompactNumberInstance(Locale.US,NumberFormat.Style.SHORT);usFormat.setMaximumFractionDigits(3);// 82.323KString uformat = usFormat.format(82323);

你还可以自定义CompactNumberFormat来实现个性化的数字格式化。

其它

除了上面以外,Java12还有一些预览属性和JVM增强功能,并没有太多的亮点。

推荐关注本文作者:码农小胖哥

分享高质量编程知识,探讨IT人生

技术干货,实战技巧,面试技巧,前沿资讯一个都不能少

Java 9 - 17 特性解读:Java 11

Java 9 - 17 特性解读:Java 10

Java 9 - 17 特性解读:Java 9

从Java 9 到 Java 17之Java 12相关推荐

  1. 《Java 技术体系》之一:Java 技术体系概览

    Java 编程语言诞生以来,围绕它建设而成的生态系统日益庞大而复杂: 它的热度经二十多年仍然不减,如今在互联网行业尤其流行. 本系列以 Java 8 (JDK 8) 为主要研究对象. TIOBE 编程 ...

  2. [Leetcode][第17题][JAVA][电话号码的字母组合][回溯]

    [问题描述][中等] [解答思路] 用哈希表/数组存储每个数字对应的所有可能的字母,然后进行回溯操作. 回溯过程中维护一个字符串,表示已有的字母排列(如果未遍历完电话号码的所有数字,则已有的字母排列是 ...

  3. JDK 17:Java 17 中的新特性

    始终严格的浮点语义.外部函数和内存 API 以及伪随机数生成器的统一 API 计划用于 9 月发布的 Java 长期支持版本. Java 17 的功能集现已冻结,标准 Java 的下一版本将拥有 10 ...

  4. 笔记整理4----Java语言高级(四)16 JAVA常用API-高级+17 泛型与常见数据结构+18 Map与Set集合+19 异常处理+20 IO流-高级

    16 JAVA常用API-高级+17 泛型与常见数据结构+18 Map与Set集合+19 异常处理+20 IO流-高级 第05天 API 今日内容介绍  Object类 & System类 ...

  5. 从Java 9 到 Java 17之Java 11

    Java 11是自Java 8以来的又一个LTS版本,是目前全球使用最多的LTS版本之一.今天我们接着在Java 9 到 Java 17系列文章中来认识针对普通开发者的Java 11. 字符串API增 ...

  6. 从Java 9 到 Java 17之Java 10

    在上一篇我们对Java 9的特性 Java 10 从Java 10 开始,Java的迭代周期缩短为半年,半年发布一个版本. 局部变量类型推断 在Java 6时初始化一个Map需要我们这样来声明: Ma ...

  7. 《Java 2 实用教程》课程学习(17)——《Java 程序设计》实验指导书-校内实验教材

    ****大学 <Java程序设计> 实验指导书 编者:王* 潘** 肖* 杨** 主审:刘** ********学院信息科学系 2013年1月9日 前  言 <Java 程序设计实验 ...

  8. Java并发指南17:Java常见多线程面试题及答案

    Java多线程面试题及答案(2020版) 前言 个人珍藏的80道Java多线程/并发经典面试题,因为篇幅太长,现在先给出1-10的答案解析哈,后面一起完善~ 1. synchronized的实现原理以 ...

  9. Java SE 7 Update 17的安装配置及相关问题解决

    Java SE 7 Update 17 小声说 Eclipse Java EE集成开发环境 下载 安装 配置 总结 小声说 首先非常感谢大家的认可,近一周来收到些私信,有些没及时回复十分不好意思,但是 ...

  10. 西安尚学堂练习09.17|Java编程笔试面试题

    下列哪些类型能被throw语句抛出? A. Error B. Exception C. Throwable D. Object [解]注意Error也是可以被throw的,只是通常Error出现程序就 ...

最新文章

  1. 各种排序算法的JAVA实现
  2. v2.matchTemplate图片尺寸问题
  3. Lucene打分规则与Similarity模块详解
  4. nmap,tcpdump
  5. SANS研究所:7大最危险的攻击技术介绍
  6. npoi 所有列调整为一页_别再浪费纸了,一张纸就能打印Word、Excel、PPT所有内容,真厉害...
  7. 基于jQuery的新浪游戏首页幻灯片
  8. Go语言实现并行分段求和计算
  9. 里氏替换原则_春辉带你了解面相对象设计第二原则(里氏替换原则)
  10. js隐藏div和class
  11. 看你能坚持读几本书?!——三十本互联网必看书籍
  12. 僵尸网络 Botnet
  13. 3.究竟什么是“财富自由”?
  14. 【115】StrokeIt相关操作
  15. QQ聊天自动刷屏视频课程-范浩浩-专题视频课程
  16. 汇编指令CLI/STI
  17. 安卓开发必备知识体系:Java篇
  18. IDEA快捷键高清壁纸
  19. java内部类的OC实现方法
  20. mysql取三个数据类型_MySQL(三)数据类型

热门文章

  1. IIS 7上安装SQL SERVER 2005报表服务可能导致不能正常连接
  2. 浏览器缓存详解:expires,cache-control,last-modified,etag详细说明
  3. json 数据类型简介
  4. linux 内核 THIS_MODULE宏定义详解
  5. ClamAV病毒库增加特征码
  6. kali使用openvas
  7. 什么情况下可以不写PHP的结束标签“?”
  8. 两篇文章说中断和异常之一
  9. Linux下基于socket多线程并发通信的实现
  10. 机器学习的若干问题解释