函数式编程

一、Optional类

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
文章版权归Tinsur.cn所有,转载分享请标注原链接
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容