新的创建集合的方法
// [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
局部变量类型推断 var
字符串强化: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
字符串缩进 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
使用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`; """;
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());
矢量计算
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
密封类(接口)(Sealed、permits 修饰符)
创建集合新的方法--9
try-with-resources--9
引入HttpClient--9
字符串强化--11
集合转对应类型的数组--11
Switch 表达式--13-14
模式匹配--14-14
文本块--13-14
记录类型(Record Type)--14-16