You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Java8 Optional及Lambda函数替换嵌套if else代码块

Java 8 Optional 改写方案

Java 9+ 最简写法(逻辑完全等价原有代码)

ifPresentOrElse是Java 9引入的Optional方法,可以同时处理有值和无值的场景:

myData.ifPresentOrElse(
    // 有值的场景:对应原有第一层if的逻辑
    value -> {
        if (value.contains("testValue")) {
            mySet.add("somedata");
        }
    },
    // 无值的场景:对应原有!myData.isPresent()的逻辑
    () -> mySet.add("someotherdata")
);

如果想要完全消除代码块里的if判断,可以结合filter拆分两个执行逻辑,和上面写法等价:

// 处理:有值且包含testValue的场景
myData.filter(value -> value.contains("testValue"))
      .ifPresent(value -> mySet.add("somedata"));
// 处理:无值的场景
myData.isEmpty() ? mySet.add("someotherdata") : null;

Java 8 兼容写法

Java 8的Optional没有ifPresentOrElse和isEmpty方法,可以用以下写法实现同等效果:

// 处理:有值且包含testValue的场景
myData.filter(value -> value.contains("testValue"))
      .ifPresent(value -> mySet.add("somedata"));
// 处理:无值的场景,利用orElseGet的副作用实现(无值时才会执行括号内逻辑)
myData.orElseGet(() -> {
    mySet.add("someotherdata");
    return "";
});

如果不排斥保留一行非嵌套的if判断,也可以写为更易读的形式:

myData.filter(value -> value.contains("testValue"))
      .ifPresent(value -> mySet.add("somedata"));

if (!myData.isPresent()) {
    mySet.add("someotherdata");
}

逻辑验证

所有写法都和原有嵌套if逻辑完全一致:

  • 当myData有值且包含testValue:往mySet添加somedata
  • 当myData有值但不包含testValue:不做任何操作
  • 当myData为空:往mySet添加someotherdata

内容的提问来源于stack exchange,提问作者sai teja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 12:45:03