Java12可用新特性一览,了解一下没有错

  • 你有一个思想,我有一个思想,我们交换后,一个人就有两个思想
  • If you can NOT explain it simply, you do NOT understand it well enough

现陆续将Demo代码和技术文章整理在一起 Github实践精选本文同样收录在此,方便大家阅读查看,觉得不错,还请Star??

日常工作对集合操作真的太频繁了,前端时间就写过一篇关于Java 12 集合的文章 Java12 Collectors.teeing 的使用详解 , 有朋友留言说这个功能比较好用。个人觉得 Java12还有几个特性可以尝试使用,这篇文章就出炉了

如果你目前使用的Java版本不是12,也没有关系,早已为你准备好良方,SDKMAN 统一灵活管理多版本Java ,可以让你快速各种尝鲜新特性

String API 变化

String.indent()

indent 「缩进」这个单词大家很熟悉了,这是Java12处理字符串的新功能,先来看方法定义:

该方法很简单,只接收一个 int 类型的参数表示缩进值,这里的 n 既可以是正数,也可以是负数,只不过是增加空格 space 和移除空格的差别,来看个例子:

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

打印结果是这样的(考验眼力的时候到了,仔细看截图在IDE中设置的缩进小点点??):

调用 indent 方法会自动添加一个换行符号 \n ,在该方法的实现中也明确给了注释说明,目的是为了行终结符的规范化

注意:对于 Tab 就是当成一个字符来看到,比如我们把上面的例子稍作修改:

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语句。为什么这么说?

  • 语句(我们原来那样使用)
  • 表达式(不必为每个case块定义一个break语句,我们可以简单地使用箭头语法)
  • 变量赋值(使用新的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);

注意: 要使用此预览特性,请记住,我们必须在应用程序启动期间使用-enable-preview标志显式地指示JVM。

Compact Number Formatting (紧凑的数据格式)

由用户界面或命令行工具呈现的大数字总是很难展现。使用数字的缩写形式则要直观很多。前端为了更有好的数据展现形式,很早就有相应的组件实现了。现在后端小伙伴也可以在java12中应用这个特性了

紧凑的数字表示更易于阅读,并且在不丢失原始含义的情况下,在屏幕上需要更少的空间。

例子:3.6M3,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近两年升级真是太快了,了解一些新功能总是没错的,大家动手实践试试吧,以后遇到类似的需求至少能避免我们重复造轮子了.....

灵魂追问

  1. 你们项目中Java的版本是多少?
  2. 项目中你会怎样建议某些工具的升级?


原文地址:https://www.cnblogs.com/FraserYu/p/12302957.html

时间: 2024-10-08 20:57:11

Java12可用新特性一览,了解一下没有错的相关文章

HTML5和CSS3新特性一览

HTML5 1.HTML5 新元素 HTML5提供了新的元素来创建更好的页面结构: 标签 描述 <article> 定义页面独立的内容区域. <aside> 定义页面的侧边栏内容. <bdi> 允许您设置一段文本,使其脱离其父元素的文本方向设置. <command> 定义命令按钮,比如单选按钮.复选框或按钮 <details> 用于描述文档或文档某个部分的细节 <dialog> 定义对话框,比如提示框 <summary>

Spring 4支持的Java 8新特性一览

有众多新特性和函数库的Java 8发布之后,Spring 4.x已经支持其中的大部分.有些Java 8的新特性对Spring无影响,可以直接使用,但另有些新特性需要Spring的支持.本文将带您浏览Spring 4.0和4.1已经支持的Java 8新特性. Spring 4支持Java 6.7和8 Java 8编译器编译过的代码生成的.class文件需要在Java 8或以上的Java虚拟机上运行.由于Spring对反射机制和ASM.CGLIB等字节码操作函数库的重度使用,必须确保这些函数库能理解

ES6、ES7、ES8、ES9、ES10新特性一览

ES全称ECMAScript,ECMAScript是ECMA制定的标准化脚本语言.目前JavaScript使用的ECMAScript版本为ECMA-417.关于ECMA的最新资讯可以浏览 ECMA news查看. ECMA规范最终由TC39敲定.TC39由包括浏览器厂商在内的各方组成,他们开会推动JavaScript提案沿着一条严格的发展道路前进. 从提案到入选ECMA规范主要有以下几个阶段: Stage 0: strawman——最初想法的提交. Stage 1: proposal(提案)——

基于Ubuntu和基于Debian的Linux Mint 20新特性一览

导读 Linux Mint 20 将基于 Ubuntu 20.04 LTS,同时,其 LMDE(Linux Mint Debian Edition,Debian 版本)4 也将到来,LMDE 版本基于 Debian GNU/Linux,提供滚动发布,而不是像常规的 Linux Mint 基于 Ubuntu. 日前 Linux Mint 官方博客释出了关于 Linux Mint 20 与 LMDE 4 的新特性信息. LMDE 4 LMDE 4 将首先发布,基于改进的 Debian 10 软件包,

PHP 7.1 新特性一览

可空类型主要用于参数类型声明和函数返回值声明. 主要的两种形式如下:<?phpfunction answer(): ?int  {   return null; //ok}function answer(): ?int  {   return 42; // ok}function say(?string $msg) {   if ($msg) {       echo $msg;   }} 从例子很容易理解,所指的就是通过 ? 的形式表明函数参数或者返回值的类型要么为指定类型,要么为 null.

前端神器 Firebug 2.0 新特性一览

如果你从事Web前端方面的开发工作,那么对Firebug一定不会陌生,这是Firefox浏览器的一款插件,集HTML查看和编辑.Javascript控制台.网络状况监视器于一体,给Web开发者带来了极大的便利,堪称Web前端开发神器. 最新版本Firebug 2.0即将发布,下面就来看看这个大版本中有哪些改进. 1.  基于新的Firefox调试引擎(JSD2) 2.  新的UI,以匹配Firefox 29版本中引入的Australis主题 3.  Script面板支持语法高亮 4.  允许检查

不只是Canvas和拖放——HTML5新特性一览

一.增加结构语义化的标签 section articel aside header hgroup footer nav figure command progress time ruby rt rp mark wbr ... 二.增加的表单类型 inputy元素增加了以下类型 email url number range Date pickers search color 全新增加的表单元素标签 datalist keygen output HTML5还增加了一些form和input的属性,详见

Java12&amp;13新特性 -- Shenandoah GC

Shenandoah 垃圾回收器是 Red Hat 在 2014 年宣布进行的一项垃圾收集器研究项目 Pauseless GC 的实现,旨在针对 JVM 上的内存收回实现低停顿的需求.该设计将与应用程序线程并发,通过交换 CPU 并发周期和空间以改善停顿时间,使得垃圾回收器执行线程能够在 Java 线程运行时进行堆压缩,并且标记和整理能够同时进行,因此避免了在大多数 JVM 垃圾收集器中所遇到的问题. Shenandoah GC 主要目标是 99.9% 的暂停小于 10ms,暂停与堆大小无关等.

atitit.Windows Server 2003 2008 2012系统的新特性 attilax 总结

atitit.Windows Server 2003  2008  2012系统的新特性 attilax 总结 1. Windows Server 2008 新特性也可以归纳为4个方面. 1 2. 相比Windows Server 08,R2 2 3. win 2012  新特性 2 4. 参考 6 1. Windows Server 2008 新特性也可以归纳为4个方面. 即将发布的Windows Server 2008是企业级的应用平台,可以为CRM等企业级应用提供更好更强的支撑,其新特性也