今天遇到一个问题,在调用第三方接口时返回的数据我用封装好的对象接收的。返回的数据字段为code,msg,data。我使用对象直接接收的data里面的数据。在数据判断时出现了问题。
1.data无数据
{“code”:“1003”,“msg”:“不存在该客户机操作系统”,“data”:{}}
2.data有数据但为empty
{“code”:“0”,“msg”:“操作成功”,“data”:{“fileList”:[],“count”:“0”}}
//这儿我直接调用第三方接口,并且返回值data 使用subplatform 接收 SubPlatformFileResp subPlatform = client.getFilesSubPlatform(subPlatFormFileReq); if(subPlatform.getData()!=null){ //data数据的非空判断 if(!subPlatform.getData().getFileList().isEmpty()){ //业务逻辑 } }
从返回值可以看出,data为 {} ,但是data并不为null,所以在后续获取getFileList()时因为没有该对象会报空指针异常,当然可以通过对filelist进行null判断也可以解决这个问题
if (subPlatform.getData().getFileList()!=null){ }
修改后的代码
if(Optional.ofNullable(subPlatform.getData().getFileList()).isPresent()){ }
为非null的值创建一个Optional。of方法通过工厂方法创建Optional类。需要注意的是,创建对象时传入的参数不能为null。如果传入参数为null,则抛出NullPointerException
Optional<String> optional = Optional.of("xiaoming"); //传入null,抛出NullPointerException Optional<Object> o = Optional.of(null);
为指定的值创建一个Optional,如果指定的值为null,则返回一个空的Optional
Optional<Object> o1 = Optional.ofNullable(null);
值存在返回true,否则返回false
Optional<String> optiona2 = Optional.of("xiaoming"); System.out.println(optiona2.isPresent());
Optional有值就返回,没有抛出NoSuchElementException
Optional<Object> o1 = Optional.ofNullable(null); System.out.println(o1.get());
Optional<Object> o1 = Optional.ofNullable(null); o1.ifPresent(s -> System.out.println(s));
如果有值则将其返回,否则返回指定的其它值
Optional<Object> o1 = Optional.ofNullable(null); System.out.println(o1.orElse("输出orElse")); // 输出orElse
orElseGet与orElse方法类似,区别在于得到的默认值。orElse方法将传入的字符串作为默认值,orElseGet方法可以接受Supplier接口的实现用来生成默认值
Optional<Object> o1 = Optional.ofNullable(null); System.out.println(o1.orElseGet(() -> "default value")); // default value
如果有值则将其返回,否则抛出supplier接口创建的异常。
Optional<Object> o1 = Optional.ofNullable(null); try { o1.orElseThrow(() -> new Exception("异常!")); } catch (Exception e) { System.out.println("info:" + e.getMessage()); }//输出:info:异常!
如果有值,则对其执行调用mapping函数得到返回值。如果返回值不为null,则创建包含mapping返回值的Optional作为map方法返回值,否则返回空Optional。
Optional<String> optional = Optional.of("xiaoming"); String s = optional.map(e -> e.toUpperCase()).orElse("shiyilingfeng"); System.out.println(s); //输出: XIAOMING
如果有值,为其执行mapping函数返回Optional类型返回值,否则返回空Optional。与map不同的是,flatMap 的返回值必须是Optional,而map的返回值可以是任意的类型T
Optional<String> optional = Optional.of("xiaoming"); Optional<String> s = optional.flatMap(e -> Optional.of(e.toUpperCase())); System.out.println(s.get()); //输出:XIAOMING
List<String> strings = Arrays.asList("rmb", "doller", "ou"); for (String s : strings) { Optional<String> o = Optional.of(s).filter(s1 -> !s1.contains("o")); System.out.println(o.orElse("没有不包含o的")); }//输出: rmb 没有不包含o的 没有不包含o的
https://www.toutiao.com/i6872294360059216388?wid=1638863738494