改善代码可读性
- 重构代码,用Lambda表达式取代匿名类;
- 用方法引用重构Lambda表达式;
- 用Stream API重构命令式的数据处理
Optional 容器类
- 主要解决空指针异常
- 防御式检查:
- 深层质疑
- 过多的退出语句
2.1 常用方法
- Optional.of(T t) : 创建 Optional 实例
- Optional.empty() : 创建一个空的 Optional 实例
- Optional.ofNullable(T t) : 若 t 不为 null,创建 Optional 实例;否则创建空实例
- orElse(T t) : 如果有值则返回该值,否则返回 t
- orElseGet(Supplier s) : 如果调用对象包含值,返回该值,否则返回 s 获取的值
- Optional<T> filter(Predicate<? super T> predicate)
- map(Function f) : 如果有值对其处理,并返回处理后的Optional,否则返回 Optional.empty()
- flatMap(Function mapper) : 与 map 类似,要求返回值必须是Optional
public final class Optional<T> {
public boolean isPresent() {
return value != null;
}
// If a value is present, invoke the specified consumer with the value, otherwise do nothing
public void ifPresent(Consumer<? super T> consumer) {
if (value != null)
consumer.accept(value);
}
// 若为 null, of(...) 会抛出 NullPointerException
public static <T> Optional<T> ofNullable(T value) {
return value == null ? empty() : of(value);
}
}
List<OrderItem> list = null;
Optional.ofNullable(list)
.ifPresent(orderItems -> orderItems.forEach(orderItem -> System.out.println(1)));
判空写法:Optional.ofNullable(变量).orElse(默认数值);
List<OrderItem> list = null;
Optional.ofNullable(list).orElse(new ArrayList<>()).forEach(orderItem -> System.out.println(1));
Child child = new Child(20, "tinyspot");
return Optional.ofNullable(child)
.map(Child::getAge)
.filter(age -> age > 15)
.filter(age -> age < 25)
.isPresent();
网友评论