当前位置: 首页 > wzjs >正文

手机网站搜索框代码常德软件开发

手机网站搜索框代码,常德软件开发,小米手机网站架构,电影网站如何做长尾关键词1. 使用Optional处理可能为空的集合 在Java开发中,集合判空是一个常见但容易出错的场景。传统方式虽然可行,但存在一些潜在问题: // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…

1. 使用Optional处理可能为空的集合

在Java开发中,集合判空是一个常见但容易出错的场景。传统方式虽然可行,但存在一些潜在问题:

// 传统判空方式
if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {// print userInfo}
}

这种写法的缺点在于:

  1. 需要引入额外的工具类(CollectionUtils)
  2. 代码可读性较差,特别是当嵌套多层时
  3. 容易遗漏判空逻辑

使用Optional可以显著改善这种情况:

// 更合理的Optional使用方式
Optional.ofNullable(userInfoList).ifPresent(list -> {for (UserInfo userInfo : list) {// print userInfo}});

这种写法的优势:

  1. 明确表达了"如果存在则处理"的意图
  2. 链式调用更加流畅
  3. 减少了代码缩进层级
  4. 避免创建空集合对象

更进一步,我们可以结合Stream API:

Optional.ofNullable(userInfoList).stream().flatMap(Collection::stream).forEach(user -> {// 处理每个用户});

2. 深度嵌套对象的处理

对于深度嵌套的对象访问,传统判空方式会导致"金字塔式"代码:

// 传统方式
String city = null;
if (orderInfo != null) {Address address = orderInfo.getAddress();if (address != null) {city = address.getCity();}
}

这种代码不仅冗长,而且:

  1. 每增加一层嵌套,复杂度指数级增长
  2. 容易遗漏某些判空条件
  3. 可维护性差

使用Optional可以将其转化为流畅的链式调用:

// Optional方式
String city = Optional.ofNullable(orderInfo).map(Order::getAddress).map(Address::getCity).orElse("Unknown City");

或者当需要抛出异常时:

String city = Optional.ofNullable(orderInfo).map(Order::getAddress).map(Address::getCity).orElseThrow(() -> new IllegalStateException("OrderInfo or Address is null"));

2.1 实际应用场景扩展

考虑更复杂的业务场景,比如需要根据城市获取税率:

// 传统方式
Double taxRate = 0.0;
if (orderInfo != null) {Address address = orderInfo.getAddress();if (address != null) {String city = address.getCity();if (city != null) {TaxInfo taxInfo = taxService.getTaxInfo(city);if (taxInfo != null) {taxRate = taxInfo.getRate();}}}
}// Optional方式
Double taxRate = Optional.ofNullable(orderInfo).map(Order::getAddress).map(Address::getCity).map(taxService::getTaxInfo).map(TaxInfo::getRate).orElse(0.0);

3. Optional API深度解析

3.1 创建Optional对象

Optional提供了三种创建方式:

  1. Optional.of(T value) - 明确值不为null时使用

    Optional<String> opt = Optional.of("value"); // 如果传入null会抛出NPE
    
  2. Optional.ofNullable(T value) - 值可能为null时使用

    Optional<String> opt = Optional.ofNullable(maybeNullValue);
    
  3. Optional.empty() - 创建空Optional

    Optional<String> opt = Optional.empty();
    

3.2 值获取与默认值处理

Optional提供了多种处理缺失值的方式:

  1. orElse(T other) - 提供默认值

    String value = optional.orElse("default");
    
  2. orElseGet(Supplier<? extends T> other) - 延迟计算默认值

    String value = optional.orElseGet(() -> expensiveOperation());
    
  3. orElseThrow(Supplier<? extends X> exceptionSupplier) - 抛出指定异常

    String value = optional.orElseThrow(() -> new CustomException("Not found"));
    

性能考虑:orElse()的参数总是会被计算,而orElseGet()只在需要时计算。对于代价高的操作,应使用orElseGet()

3.3 值转换与扁平化

  1. map(Function<? super T, ? extends U> mapper) - 值转换

    Optional<String> upper = optional.map(String::toUpperCase);
    
  2. flatMap(Function<? super T, Optional<U>> mapper) - 避免嵌套Optional

    Optional<String> result = optional.flatMap(this::getOptionalValue);
    

区别示例:

Optional<Optional<String>> nested = optional.map(this::getOptionalValue); // Optional<Optional<String>>
Optional<String> flat = optional.flatMap(this::getOptionalValue); // Optional<String>

3.4 存在性检查

  1. isPresent() - 检查值是否存在

    if (optional.isPresent()) {// do something
    }
    
  2. ifPresent(Consumer<? super T> consumer) - 存在时执行操作

    optional.ifPresent(value -> process(value));
    
  3. ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction) (Java 9+) - 存在或不存在时分别执行操作

    optional.ifPresentOrElse(value -> process(value),() -> log.warn("Value not present")
    );
    

4. 最佳实践与注意事项

  1. 不要将Optional用作字段或方法参数
    Optional设计初衷是作为返回类型,用于明确表示方法可能不返回值。

  2. 避免Optional.get()
    直接调用get()会抛出NoSuchElementException,应该使用orElse()等安全方法。

  3. 集合返回空集合而非Optional
    对于集合返回类型,返回空集合比返回Optional.empty()更合适。

  4. 谨慎使用Optional.of()
    只有确定值不为null时才使用of(),否则使用ofNullable()。

  5. 性能考虑
    Optional会创建额外对象,在性能敏感的场景要谨慎使用。

  6. 与Stream结合使用
    Java 9+中Optional新增了stream()方法,可以更好地与Stream API集成:

    List<String> names = Optional.ofNullable(userList).stream().flatMap(List::stream).map(User::getName).collect(Collectors.toList());
    

5. 总结

Optional是Java 8引入的强大工具,它:

  • 明确表达了"可能没有值"的语义
  • 减少了显式的null检查
  • 提供了函数式风格的操作方法
  • 使代码更加简洁和可读

通过合理使用Optional,我们可以编写出更安全的代码,有效减少空指针异常的发生。但同时也要注意它的适用场景,避免滥用。

http://www.dtcms.com/wzjs/789744.html

相关文章:

  • 用wordpress做企业网站莱芜杂谈 莱芜话题
  • ps网站首页设计精品网站建设价格
  • 大型网站服务器架构诸城市房产信息网
  • 免费元素素材网站商丘网络科技有限公司
  • 百度怎么建立自己的网站长沙有什么好玩的
  • html5手机网站建设学校网站建设总结
  • 文章类网站免费视图网站建设
  • 怎么做网站底部版权信息seo策略什么意思
  • 网站被k表现绵阳口碑最好的装修公司
  • 用织梦做的网站怎样看小说盗版网站怎么做
  • 建站套餐jsp网站地图生成器
  • 遵义创意网站设计天津制作网站
  • 网站网站制作服务建网站和开发网站
  • 广东网站建设哪家好平面设计素材网
  • 网站格式有哪些顾家家居网站是哪个公司做的
  • 网站空间续费后网页不能打开西安建筑工程有限公司
  • 云南住房与城乡建设厅网站手机网站制作平台有哪些
  • 外贸建站建在哪里精品课程网站的设计与建设要求
  • 关于做网站的调查问卷周大福网站设计特点
  • 电子书网站 自己做粮食网站建设的背景及意义
  • 做网站要学哪些wordpress扫公众号二维码登录
  • 常州市新北区建设局网站网站后台 登录界面模板 远吗
  • 网站建设的安全防护方法推动高质量发展心得体会
  • 怎么把网站管理系统集团响应式网站建设
  • 网站title江门模板建站定制
  • 网站备案接入商地方网站改版方案
  • 视频网站程序模板住院证明图片在线制作
  • 北京住总第一开发建设有限公司网站首页网址转app制作生成器
  • 优化的含义哈尔滨网络优化工程师
  • 做网站能用自己电脑吗wordpress主题模板免费