①:变量类型推断
var code="java";
String code ="java";
var声明变量可以自动推断类型
②:集合加强
List.of("java","C++","PY");
生成一个不可变的List,说白了就是成一个阉割的数组了
(不能进行添加、删除、替换、排序等操作)
static final class ListN<E> extends ImmutableCollections.AbstractImmutableList<E> implements Serializable {
@Stable
static List<?> EMPTY_LIST;
@Stable
private final E[] elements;
@SafeVarargs
ListN(E... input) {
E[] tmp = new Object[input.length];
for(int i = 0; i < input.length; ++i) {
tmp[i] = Objects.requireNonNull(input[i]);
}
this.elements = tmp;
}
③:Stream加强
加了takeWhile()和dropWhile()方法(此处注意这块要和filter区分开)
Stream.of(5, 4, 3, 2, 1)
.takeWhile(n -> n > 3).collect(Collectors.toList());
Stream.of(5, 4, 3, 2, 1)
.filter(n -> n > 3).collect(Collectors.toList());
虽然他俩的结果都是[5, 4]
但不同的是:takeWhile当发现不符合条件的直接就断路结束
而filter是全部遍历一遍选出合适的不存在断路操作
④:Optional加强
自定义异常(Java8并非11新特性)
Optional.ofNullable(dd).orElseThrow(() -> new NoSuchMethodError());
//源码得传入无参的逻辑
public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X {
直接转stream
Optional.ofNullable(List.of("java", "C++", "PY")).stream();
optional空代替
Optional.ofNullable(null).or(()->Optional.of("C++"));