Java 11

Java 11

本地变量类型推断

var javastack = "javastack";
System.out.println(javastack);

字符串加强

Java 11增加了一系列的字符串处理方法,如以下所示。


// 判断字符串是否为空白
" ".isBlank(); // true
// 去除首尾空格
" Javastack ".strip(); // "Javastack"
// 去除尾部空格
" Javastack ".stripTrailing(); // " Javastack"
// 去除首部空格
" Javastack ".stripLeading(); // "Javastack "
// 复制字符串
"Java".repeat(3);// "JavaJavaJava"
// 行数统计
"A\nB\nC".lines().count(); // 3

集合加强

Java 9开始,Jdk里面为集合(List/ Set/ Map)都添加了ofcopyOf方法,它们两个都用来创建不可变的集合。

var list = List.of("Java", "Python", "C");
var copy = List.copyOf(list);
System.out.println(list == copy); // true

var list = new ArrayList<String>();
var copy = List.copyOf(list);
System.out.println(list == copy); // false

Stream加强

StreamJava 8中的新特性,Java 9开始对Stream增加了以下4个新方法。

  • 增加单个参数构造方法,可为null
Stream.ofNullable(null).count(); // 0
  • 增加takeWhiledropWhile方法
Stream.of(1, 2, 3, 2, 1)
.takeWhile(n -> n < 3)
.collect(Collectors.toList()); // [1, 2]

从开始计算,当n < 3时就截止。

Stream.of(1, 2, 3, 2, 1)
.dropWhile(n -> n < 3)
.collect(Collectors.toList()); // [3, 2, 1]
  • iterate重载

这个iterate方法的新重载方法,可以让你提供一个Predicate (判断条件)来指定什么时候结束迭代。

Optional加强

Opthonal也增加了几个非常酷的方法,现在可以很方便的将一个Optional转换成一个Stream,或者当一个空Optional时给它一个替代的。

Optional.of("javastack").orElseThrow(); // javastack
Optional.of("javastack").stream().count(); // 1
Optional.ofNullable(null)
.or(() -> Optional.of("javastack"))
.get(); // javastack

HTTP Client API

这是Java 9开始引入的一个处理HTTP请求的的孵化HTTP Client API,该API支持同步和异步,而在Java 11中已经为正式可用状态,你可以在java.net包中找到这个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);
上一页
下一页