JDK9-15的新特性
内容学习自知秋老师的翻译课程
JDK 9增加 了 List.of()、Set.of()、Map.of() 和 Map.ofEntries()等工厂方法来创建不可变集合,类似于ImmutableMap.of()静态方法。不可变集合不能进行添加、删除、替换、 排序等操作,不然会报java.lang.UnsupportedOperationException 异常。
Collectors 中增加了新的方法 filtering() 和 flatMapping()。
Collectors 的 filtering() 方法类似于 Stream 类的 filter() 方法,都是用于过滤元素。
JDK 9 Stream 中增加了新的方法 ofNullable()、dropWhile()、takeWhile() 以及 iterate() 方法的重载方法。
Java 9 中的 ofNullable() 方 法允许我们创建一个单元素的 Stream,可以包含一个非空元素,也可以创建一个空 Stream。而在 Java 8 中则不可以创建空的 Stream 。
copyOf方法
代码示例
package com.wxit.api;
import java.util.ArrayList;
import java.util.List;
/**
* @author wj
* @date 2021.09.25 09:49
*/
public class CopyOfApiDemo {
public static void main(String[] args) {
List<String> names = new ArrayList<>();
names.add("吴杰");
names.add("婷姐");
names.add("佳伟");
List<String> copyOfNames = List.copyOf(names);
doNotChange(copyOfNames);
System.out.println(copyOfNames);
}
private static void doNotChange(List<String> copyOfNames) {
copyOfNames.add("子龙");
}
}
jdk11中引进的方法writeString 和 readString
代码示例
package com.wxit.api;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
/**
* @author wj
* @date 2021.09.26 20:58
*/
public class FileReadWriteRunner {
/*
可以看到,使用这些特定的新方法,readString 和 writeString 使得从文件中读取可写入变的更加容易
*/
public static void main(String[] args) throws IOException {
Path path = Paths.get("./resource/sample.txt");
String fileContent = Files.readString(path);
System.out.println(fileContent);
String newFileContent = fileContent.replace("wujie", "xiaohao");
Path newFilePath = Paths.get("./resource/sample-new.txt");
Files.writeString(newFilePath,newFileContent);
}
}
jdk11中引进的Predicate.not方法
代码示例
package com.wxit.api;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Stream;
/**
* @author wj
* @date 2021.09.26 21:16
*/
public class PredicateNotRunner {
public static void main(String[] args) {
List<Integer> numbers = List.of(12,25,36,24,13,125);
Predicate<Integer> evenNumberPredicate = number -> number % 2 ==0;
// Stream<Integer> integerStream = numbers.stream().filter(evenNumberPredicate);
// integerStream.forEach(s -> System.out.println(s));
numbers.stream().filter(evenNumberPredicate.negate()).forEach(System.out::println);
}
}