478 字
2 分钟
Java11
Java 11 新特性
Java 11 是继 Java 8 之后的第一个 LTS 长期支持功能版本。
root((Java 11 新特性)) 标准HttpClient 免编译启动 增强String的API 集合转换为数组 Predicate 接口 var 变量 嵌套类标准HttpClient
Java 9 中引入了增强的 HttpClient API 作为实验性功能。在 Java 11 中,现在 HttpClient 是一个标准。建议使用 Apache Http Client API 等其他 HTTP Client API 代替。它的功能非常丰富,现在基于 Java 的应用程序可以在不使用任何外部依赖的情况下发出 HTTP 请求。
import java.io.IOException;import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;import java.time.Duration;
public class APITester { public static void main(String[] args) { HttpClient httpClient = HttpClient.newBuilder() .version(HttpClient.Version.HTTP_2) .connectTimeout(Duration.ofSeconds(10)) .build(); try { HttpRequest request = HttpRequest.newBuilder() .GET() .uri(URI.create("https://www.baidu.com")) .build(); HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println("Status code: " + response.statusCode()); System.out.println("Headers: " + response.headers().allValues("content-type")); System.out.println("Body: " + response.body()); } catch (IOException | InterruptedException e) { e.printStackTrace(); } }}免编译启动
$ java Test.javaHello World!增强 String 的 API
String.repeat(int) : 重复给定次数的字符串。返回连接的字符串。String.isBlank() :检查字符串是否为空或只有空格。String.strip() : 删除前导和尾随空格。String.stripLeading() : 删除前导空格。String.stripTrailing() : 删除尾随空格。String.lines() : 返回多行字符串的行流。集合转换为数组
import java.util.Arrays;import java.util.List;
public class APITester { public static void main(String[] args) { List<String> namesList = Arrays.asList("Joe", "Julie");
// Old way String[] names = namesList.toArray(new String[namesList.size()]);
// New way names = namesList.toArray(String[]::new); }}Predicate 接口
Java 11 向 Predicate 接口引入了新方法 not() 来否定类似于 negate 方法的现有谓词。
import java.util.Arrays;import java.util.List;import java.util.function.Predicate;import java.util.stream.Collectors;
public class APITester { public static void main(String[] args) { List<String> tutorialsList = Arrays.asList("Java", "\n", "HTML", " ");
List<String> tutorials = tutorialsList.stream() .filter(Predicate.not(String::isBlank)) .collect(Collectors.toList());
tutorials.forEach(tutorial -> System.out.println(tutorial)); }}var 变量
Java 11 允许在 lambda 表达式中使用 var,它可用于将修饰符应用于局部变量。
import java.util.Arrays;import java.util.List;import java.util.stream.Collectors;
@interface NonNull {}
public class APITester { public static void main(String[] args) { List<String> tutorialsList = Arrays.asList("Java", "HTML");
String tutorials = tutorialsList.stream() .map((@NonNull var tutorial) -> tutorial.toUpperCase()) .collect(Collectors.joining(", "));
System.out.println(tutorials); }}