1、字符串加强
1. isBlank()
判断字符串中的字符是否都为空白
2. strip()
去除字符串首尾的空白
3. stripTrailing()
去除字符串尾部的空白
4. stripLeading()
去除字符串首部的空白
5. repeat()
复制字符串,可以传入一个int类型值来控制复制次数
2、集合加强
1. takeWhile()
该方法会从流中一直获取判定器为真的元素,一旦遇到元素为假,就终止处理
Stream<Integer> stream = Stream.of(1, 3, 2, 5, 6, 7); Stream stream2 = stream.takeWhile(t -> t % 2 != 0); stream2.forEach(System.out::println);
这段程序的运行结果:
1 3
当获取到元素2时,判定器为假,此时会终止处理,所以后面的元素就不会再去处理。
2. dropWhile()
那么这方法和takeWhile()方法相反,它会从流中一直丢弃判定器为真的元素,一旦遇到元素为假,就终止处理
Stream<Integer> stream = Stream.of(1, 3, 2, 5, 6, 7); Stream stream2 = stream.dropWhile(t -> t % 2 != 0); stream2.forEach(System.out::println);
所以上面程序段的执行结果为:
2 5 6 7
3. copyOf()
var list = List.of("Java", "Python", "C"); var copy = List.copyOf(list); System.out.println(list == copy); // true
3、Optional 加强
Optional.of("javastack").orElseThrow(); // javastack Optional.of("javastack").stream().count(); // 1 Optional.ofNullable(null) .or(() -> Optional.of("javastack")) .get(); // javastack
4、InputStream 加强
var classLoader = ClassLoader.getSystemClassLoader(); var inputStream = classLoader.getResourceAsStream("javastack.txt"); var javastack = File.createTempFile("javastack2", "txt"); try (var outputStream = new FileOutputStream(javastack)) { inputStream.transferTo(outputStream); }
5、HTTP Client API
var request = HttpRequest.newBuilder() .uri(URI.create("https://javastack.cn")) .GET() .build(); var client = HttpClient.newHttpClient(); // 同步 HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.body()); // 异步 client.sendAsync(request, HttpResponse.BodyHandlers.ofString()) .thenApply(HttpResponse::body) .thenAccept(System.out::println);
6、化繁为简,一个命令编译运行源代码
- // 编译
javac Javastack.java
- // 运行
java Javastack
在 Java 11 版本中,通过一个 java 命令就直接搞定了,如以下所示。
java Javastack.java