前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Optional再扩展

Optional再扩展

作者头像
阿超
发布2022-08-16 18:45:08
6480
发布2022-08-16 18:45:08
举报
文章被收录于专栏:快乐阿超

他们之所以做得到,就因为他们认为他们能够做到。—— 维吉尔

关于Optional的介绍,之前的博客已经说过了,这里就不再赘述

这里写点常用的例子

代码语言:javascript
复制
package com.ruben;

import java.util.*;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.function.Supplier;
import java.util.stream.Stream;

/**
 * @ClassName: OptionalDemo
 * @Description: 我还没有写描述
 * @Date: 2021/1/5 0005 20:47
 * *
 * @author: <achao1441470436@gmail.com>
 * @version: 1.0
 * @since: JDK 1.8
 */
public class OptionalDemo {
    public static void main(String[] args) {
        String str = null;
        // 直接使用Optional.map去调用函数,避免空指针,其中的任意一个函数返回为空的话,则直接调用后面的orElse(String::new)并返回new String()执行的结果
        System.out.println(Optional.ofNullable(str).map(""::equals).map(Boolean::getClass).map(Class::getName).orElseGet(String::new));
        // 上面的方法,每次都需要使用.map去操作,比较繁琐,于是这里定义一个叫 avoidNPE 的函数去处理空指针异常
        // 使用方式如下
        System.out.println(avoidNPE(() -> Boolean.valueOf(str.equals("")).equals(Boolean.FALSE)).orElse(false));
        // 再来一个对比,更明显一点
        // 之前
        System.out.println(Optional.ofNullable(Arrays.asList()).map(List::stream).map(Stream::sorted).map(Stream::distinct).flatMap(Stream::findFirst).orElse("empty"));
        // 使用自定义的函数后
        System.out.println(avoidNPE(() -> Arrays.asList().stream().sorted().distinct().findFirst().orElse("empty")).get());
        List<String> list = null;
        // 同理,数组越界也可以自定义一个函数做相同处理
        avoidNPEOrIOB(list, 5).filter(s -> s.length() > 2).map(String::hashCode).ifPresent(System.out::println);

    }

    /**
     * @MethodName: avoidNPEOrIOB
     * @Description: 避免空指针和数组越界
     * @Date: 2021/1/5 0005 21:14
     * *
     * @author: <achao1441470436@gmail.com>
     * @param: [list, index]
     * @returnValue: java.util.Optional<T>
     */
    public static <T> Optional<T> avoidNPEOrIOB(List<T> list, int index) {
        try {
            return Optional.ofNullable(list.get(index));
        } catch (NullPointerException | ArrayIndexOutOfBoundsException e) {
            return Optional.empty();
        }
    }

    /**
     * @MethodName: avoidNPE
     * @Description: 避免空指针
     * @Date: 2021/1/5 0005 21:14
     * *
     * @author: <achao1441470436@gmail.com>
     * @param: [supplier]
     * @returnValue: java.util.Optional<T>
     */
    public static <T> Optional<T> avoidNPE(Supplier<T> supplier) {
        try {
            return Optional.ofNullable(supplier.get());
        } catch (NullPointerException e) {
            return Optional.empty();
        }
    }

}

执行结果

image-20210105211448887
image-20210105211448887
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-01-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档