首页 > 编程语言 >从Java 9 到 Java 17 新特性梳理

从Java 9 到 Java 17 新特性梳理

时间:2022-08-31 11:01:42浏览次数:43  
标签:Files Java String 17 -- hello java 梳理 14

Java 9

  • 新的创建集合的方法

 // [1, 2, 3, 4]
 List<Integer> integers = List.of(1, 2, 3, 4);
 // {1,2,3}
 Set<Integer> integerSet = Set.of(1, 2, 3);
 // {"hello":"world","hi":"java"}
 Map<String, String> hello = Map.of("hello", "world", "hi", "java");
  • Stream扩展:ofNullable、iterate、takeWhile、dropWhile、Optional扩展

  • try-with-resources 优化

  • 接口私有方法

  • 引入HttpClient

Java 1

  • 局部变量类型推断 var

java 11

  • 字符串强化:isBlank()、lines()、strip()、repeat(n)

  • 集合转对应类型的数组

     List<String> sampleList = Arrays.asList("felord.cn", "java 11");
             // array = {"felord.cn", "java 11"};
             String[] array = sampleList.toArray(String[]::new);
  • 断言取反 Predicate.not()

  • 文件中读写字符串内容更方便

     String dir= "C://yourDir";
     // 写入文件
     Path path = Files.writeString(Files.createTempFile(dir, "hello", ".txt"), "hello java 11");
     // 读取文件
     String fileContent = Files.readString(path);
  • HttpClient支持HTTP2

java12

  • 字符串缩进 String indent(int n):当n>0时,会在字符串的每一行开头插入n个空格,字符串整体右移。当n<0时,会在字符串的每一行开头删除n个空格,如果实际的空格数小于n,删除该行所有空格,但是并不会换行。

  • 字符串转换

     <R> R transform(Function<? super String, ? extends R> f)
     String txt = "hello ";
             // hello hello
             String s = txt.transform(str -> str.repeat(2));
  • 基于内容的文件匹配 Files.mismatch(Path,Path)

     // 文件对比
     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);
  • Collectors::teeing

  • 数字化格式类CompactNumberFormat

java 13

  • 使用AppCDS的时候,就不在需要这么复杂了

  • ZGC 可以将未使用的堆内存返回给操作系统

  • Switch 表达式 (Preview)

     int i;
     switch (x) {
         case "1":
             i=1;
             break;
         case "2":
             i=2;
             break;
         default:
             i = x.length();
             break;
     }
     int i = switch (x) {
         case "1" -> 1;
         case "2" -> 2;
         default -> {
             int len = args[1].length();
             yield len;
         }
     };
  • 文本块

    String query = """
        SELECT `EMP_ID`, `LAST_NAME` FROM `EMPLOYEE_TB`
        WHERE `CITY` = 'INDIANAPOLIS'
        ORDER BY `EMP_ID`, `LAST_NAME`;
    """;

java 14

  • instanceof模式匹配

    //在Java14之前,我们通常的写法如下:
    
    Object obj = "程序新视界";
    if(obj instanceof String){
     String str = (String) obj;
     System.out.println("关注公众号:" + str);
    }
    
    //通过java14的新特性,我们可以简化成如下方式:
    Object obj = "程序新视界";
    if(obj instanceof String str){
     System.out.println("关注公众号:" + str);
    }
  • Switch表达式 转正

  • 记录类型(Record Type)的引入

    //定义一个Record类型如下:
    public record Point(int x, int y) {
    }
    
    //使用Record操作如下:
    Point point = new Point(1,3);
    System.out.println(point.x());
    System.out.println(point.y());

java16

  • 矢量计算

  • Record类型在JDK14作为preview,在JDK15处于第二轮preview,在JDK16转正

  • instanceof的模式匹配在JDK14作为preview,在JDK15作为第二轮的preview,在JDK16转正

  • jpackage在JDK14引入,JDK15作为incubating工具,在JDK16转正,从jdk.incubator.jpackage转为jdk.jpackage。它支持Linux: deb and rpm、macOS: pkg and dmg、Windows: msi and exe

java17

  • 密封类(接口)(Sealed、permits 修饰符)

总结:java9到java17,常用新特性

  • 创建集合新的方法--9

  • try-with-resources--9

  • 引入HttpClient--9

  • 字符串强化--11

  • 集合转对应类型的数组--11

  • Switch 表达式--13-14

  • 模式匹配--14-14

  • 文本块--13-14

  • 记录类型(Record Type)--14-16

标签:Files,Java,String,17,--,hello,java,梳理,14
From: https://www.cnblogs.com/qfsz168/p/16642252.html

相关文章

  • JavaScript Fundamentals – Part 2
    Functions(函数)functionlogger(){console.log('MynameisShubham');}//calling/running/invokingfunction(调用/运行/调用函数)logger();//Myname......
  • java 实体类命名
    阿里巴巴Java开发手册中的DO、DTO、BO、AO、VO、POJO定义分层领域模型规约:DO(DataObject):与数据库表结构一一对应,通过DAO层向上传输数据源对象。DTO(DataTransferObjec......
  • Joinery——Java的数据处理库
    资源https://joinery.sh/v1.10/api/reference/joinery/DataFrame.htmlhttps://github.com/cardillo/joinery使用maven集成到java项目中<dependency><groupId>sh.jo......
  • Java8lambda表达式的使用
    Java8提供很多lambda表达式,能够使得开发代码更加简洁优美。本文学习lambda后总结了一些lambda表达式的使用。1、list.forEachthis.supplierQuoteByIdRespose.getQuoteIn......
  • JavaScript 中的变量
    JavaScript中的变量让我们快速看一下JavaScript中的变量?变量是任何编程语言的基础部分,因此深入了解变量对于掌握任何编程语言都是必要的。什么是变量?变量是存储数据......
  • Javascript:承诺
    Javascript:承诺JavascriptPromises为了理解javascript中的Promise,理解回调函数及其带来的挑战至关重要。您可以从我以前的博客中了解更多信息。[Javascript:回调函......
  • Codeforces Round #817 (Div. 4)
    CF传送门因为洛谷题库未更新,所以给出的题面都是CF的。现场打真是太卡了(梯子挂了,codeforc.es也崩了),所以五六分钟才打开题目\(qwq\)A.SpellCheck萌萌题,把字符串放桶里......
  • Javascript中的链表
    Javascript中的链表数据结构的介绍文章。链表概念与应用于Javascript语言的实际示例。介绍数据结构是一种有效处理大量数据的手段,了解它的结构和组成为我们提供了更......
  • Codeforces Round #817 (Div. 4)E Counting Rectangles
    CountingRectangles思维把所有的矩形左上角都叠在一起,就会发现是一个二维前缀和的求解问题:\(\sum_{i=h_s+1}^{h_b-1}\sum_{j=w_s+1}^{w_b-1}(i*j*cnt_{ij})\)这个显......
  • JavaScript 中的全局变量解释
    JavaScript中的全局变量解释****全局变量被定义在函数之外或在整个程序中使用的窗口对象旁边(除非被本地人遮蔽)。即使您声明一个变量而不使用var,它仍然会被解释为全局......