一、Optional类
用来解决空指针异常,包装对象,可以优雅处理 null,避免嵌套 if (obj != null)
1.1 创建Optional类
// 空 Optional
Optional<String> empty = Optional.empty();
// 包装非 null 值
Optional<String> opt = Optional.of("Hello");
// 可以包装 null
Optional<String> optNullable = Optional.ofNullable(null);
1.2 常用方法
Optional<String> opt = Optional.ofNullable(getName());
// 判断是否有值
boolean present = opt.isPresent();
// 如果有值就消费,没有就不做
opt.ifPresent(s -> System.out.println(s));
// 获取值,有值返回,没有抛出 NoSuchElementException
String value = opt.get();
// 获取值,有值返回,没有返回默认值
String value = opt.orElse("default");
// 获取值,没有就用 Supplier 提供默认值
String value = opt.orElseGet(() -> "default");
// 映射,如果有值就转换,没有返回空
Optional<Integer> length = opt.map(String::length);
// 过滤,满足条件返回,否则空
Optional<String> filtered = opt.filter(s -> s.length() > 5);
1.3 示例
static void main() {
List<Integer> numbers = List.of(1,2,3,4,5);
Optional<Integer> result = find(numbers, 55);
if (result.isPresent()){
IO.println(result.toString());
}else {
IO.println("未找到");
}
}
//在一个列表中查找一个元素
public static Optional<Integer> find(List<Integer> numbers , Integer target){
for(Integer i : numbers){
if (i.equals(target)){
return Optional.of(i);
}
}
return Optional.empty();
}
二、日期时间API改进
获取当前时间
LocalDate ld = LocalDate.now();
LocalTime lt = LocalTime.now();
LocalDateTime ldt = LocalDateTime.now();
需要注意的是这三个对象一旦确定不可改变,若要改变需要新new对象
static void main() {
//获取当前时间
//本地日期
LocalDate ld = LocalDate.now();
IO.println(ld.getYear());
IO.println(ld.getMonthValue());
LocalDate ld15 = ld.plusDays(1);
IO.println(ld15.getDayOfMonth());
IO.println(ld.getDayOfWeek().getValue());//1~7
//本地时间
LocalTime lt = LocalTime.now();
IO.println(lt.getHour()); // 输出当前小时数
IO.println(lt.getMinute());
IO.println(lt.getSecond());
LocalDateTime ldt = LocalDateTime.now();
}
THE END

暂无评论内容