现陆续将Demo代码和技术文章整理在一块儿 Github实践精选(https://github.com/FraserYu/learnings)
「本文一样收录在此」,方便你们阅读查看,以为不错,还请Star前端
平常工做对集合操做真的太频繁了,前端时间就写过一篇关于Java 12 集合的文章 JDK12 Collectors.teeing 功能真香 , 有朋友留言说这个功能比较好用。我的以为 Java12还有几个特性能够尝试使用,这篇文章就出炉了java
若是你目前使用的Java版本不是12,也没有关系,早已为你准备好良方,SDKMAN 统一灵活管理多版本Java ,可让你快速各类尝鲜新特性git
String API 变化
String.indent()github
indent 「缩进」这个单词你们很熟悉了,这是Java12处理字符串的新功能,先来看方法定义:算法
该方法很简单,只接收一个 int 类型的参数表示缩进值,这里的 n 既能够是正数,也能够是负数,只不过是增长空格 space 和移除空格的差异,来看个例子:后端
String result = "foo\nbar\nbar2".indent(4); System.out.println(result);
打印结果是这样的(考验眼力的时候到了,仔细看截图在IDE中设置的缩进小点点):ide
调用 indent 方法会自动添加一个换行符号 \n ,在该方法的实现中也明确给了注释说明,目的是为了行终结符的规范化工具
注意:对于 Tab 就是当成一个字符来看到,好比咱们把上面的例子稍做修改:spa
String result = "foo\nbar\n\tbar2".indent(4); System.out.println(result);
来看打印结果,注意和上面的不一样:命令行
就是这么简单,咱们继续向下看
String.transform()
transform 「转换」,咱们常常会遇到字符串形势转换的需求,transform方法接收一个 Function 类型的参数, 生成一个全新形式的字符串
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); }
有朋友可能会说,这个和单纯的对字符串 trim 或者其余操做有什么区别啊?由于接受的参数是 Function类型,当Function类型做为入参时,内部的「处理逻辑」将增长更多灵活性
Files.mismatch(Path, Path)
有时候,咱们须要比较两个文件的内容是否相同,这个API就派上用场了,该方法比较两个 path 下的文件,而且返回一个 long 值,这个值表示第一处不匹配的字节位置。若是返回-1,说明两个文件相等,仍是来看个例子:
Path file1 = Paths.get("/Users/fraser/Documents/projects/personal/learning-demo-collection/jdk12-demo/src/file1.txt"); Path file2 = Paths.get("/Users/fraser/Documents/projects/personal/learning-demo-collection/jdk12-demo/src/file2.txt"); try { long mismatch = Files.mismatch(file1, file2); System.out.println(mismatch); } catch (IOException e) { e.printStackTrace(); }
两个文件内容分别是:
//file1.txt 你们好,我是日拱一兵,叫我拱哥就好 //file2.txt 你们好,我是日拱一兵,叫我兵兵就好
查看运行结果:
❝
建议你们查看一下 mismatch 的实现逻辑,有个小算法在里面的
❞
Support for Unicode 11 (当个了解就行了)
当下,Emoji 表情符号在社交媒体渠道上扮演着重要角色,因此支持最新的 Unicode 规范比以往任什么时候候都更重要。Java 12保持了同步并支持Unicode 11。Unicode 11增长了684个字符,共137,374个字符,增长了7个新脚本,共146个脚本。
Switch Expressions(Preview)
这个更改扩展了switch语句。为何这么说?
boolean isWeekend = switch (day) { case MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY -> false; case SATURDAY, SUNDAY -> true; default -> thrownew IllegalStateException("Illegal day entry :: " + day); }; System.out.println(isWeekend);
❝
「注意:」 要使用此预览特性,请记住,咱们必须在应用程序启动期间使用-enable-preview标志显式地指示JVM。
❞
Compact Number Formatting (紧凑的数据格式)
由用户界面或命令行工具呈现的大数字老是很难展示。使用数字的缩写形式则要直观不少。前端为了更有好的数据展示形式,很早就有相应的组件实现了。如今后端小伙伴也能够在java12中应用这个特性了
紧凑的数字表示更易于阅读,而且在不丢失原始含义的状况下,在屏幕上须要更少的空间。
❝
例子:3.6M 比 3,600,000 容易读得多
❞
Java 12 引入了一个叫作 NumberFormat.getCompactNumberInstance(Locale, NumberFormat.Style)的静态方法。用于建立紧凑数字表示形式,来看例子:
NumberFormat formatter = NumberFormat.getCompactNumberInstance(Locale.US, NumberFormat.Style.SHORT); String formattedString = formatter.format(25000L); System.out.println(formattedString);
来看运行结果:
另外,CompactNumberFormat 是 NumberFormat的子类,咱们能够自定义它的实例(其实就是格式化样式等),很简单,这个你们自行查看吧
总结
Java近两年升级真是太快了,了解一些新功能老是没错的,你们动手实践试试吧,之后遇到相似的需求至少能避免咱们重复造轮子了.....
灵魂追问
项目中你会怎样建议某些工具的升级?