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

Android中如何避免嵌套IF条件实现更简洁的代码?

优化多重else if条件的简洁实现方案

原代码的问题在于大量重复的条件判断,每个分支都要校验所有参数的状态,不仅冗余,后续新增设置项时还容易漏改条件。下面提供两种更简洁的实现方式,核心思路是把参数与对应执行动作绑定,通过遍历或流式处理替代嵌套判断。

方式一:用列表封装参数与动作(Java 8+适用)

先把每个设置项的参数获取逻辑和对应执行方法封装成条目,再通过流式处理判断并执行:

import java.util.AbstractMap;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
import java.util.function.Supplier;

// 封装参数提供者和对应的执行动作
List<Map.Entry<Supplier<Integer>, Consumer<Integer>>> settingEntries = Arrays.asList(
    new AbstractMap.SimpleEntry<>(() -> advance_value_power_save_after, pesManager::advanceSettingsPowerSaveAfterCommand),
    new AbstractMap.SimpleEntry<>(() -> advance_value_power_off, pesManager::advanceSettingsPowerOffCommand),
    new AbstractMap.SimpleEntry<>(() -> advance_value_grid, pesManager::advanceSettingsGridCommand),
    new AbstractMap.SimpleEntry<>(() -> advance_value_aux, pesManager::advanceSettingsAuxCommand),
    new AbstractMap.SimpleEntry<>(() -> advance_dim_dispaly, pesManager::advanceSettingsDimDisplay),
    new AbstractMap.SimpleEntry<>(() -> advance_fast_charge, pesManager::advanceSettingsFastChargeMode)
);

// 统计非零参数的数量
long nonZeroCount = settingEntries.stream()
    .map(Map.Entry::getKey)
    .map(Supplier::get)
    .filter(v -> v != 0)
    .count();

if (nonZeroCount == 1) {
    // 找到唯一非零参数并执行对应动作
    settingEntries.stream()
        .filter(entry -> entry.getKey().get() != 0)
        .findFirst()
        .ifPresent(entry -> entry.getValue().accept(entry.getKey().get()));
} else {
    // 原else分支的业务逻辑
}

方式二:用枚举类统一管理设置项(Java 16+推荐)

用枚举类把每个设置项的参数和动作绑定,代码可读性和扩展性更强:

import java.util.Arrays;
import java.util.function.Consumer;
import java.util.function.Supplier;

enum SettingType {
    POWER_SAVE_AFTER(() -> advance_value_power_save_after, pesManager::advanceSettingsPowerSaveAfterCommand),
    POWER_OFF(() -> advance_value_power_off, pesManager::advanceSettingsPowerOffCommand),
    GRID(() -> advance_value_grid, pesManager::advanceSettingsGridCommand),
    AUX(() -> advance_value_aux, pesManager::advanceSettingsAuxCommand),
    DIM_DISPLAY(() -> advance_dim_dispaly, pesManager::advanceSettingsDimDisplay),
    FAST_CHARGE(() -> advance_fast_charge, pesManager::advanceSettingsFastChargeMode);

    private final Supplier<Integer> valueSupplier;
    private final Consumer<Integer> action;

    SettingType(Supplier<Integer> valueSupplier, Consumer<Integer> action) {
        this.valueSupplier = valueSupplier;
        this.action = action;
    }

    public int getValue() {
        return valueSupplier.get();
    }

    public void execute() {
        action.accept(getValue());
    }
}

// 业务逻辑处理
long nonZeroCount = Arrays.stream(SettingType.values())
    .filter(type -> type.getValue() != 0)
    .count();

if (nonZeroCount == 1) {
    Arrays.stream(SettingType.values())
        .filter(type -> type.getValue() != 0)
        .findFirst()
        .ifPresent(SettingType::execute);
} else {
    // 原else分支的业务逻辑
}

优化优势

  1. 减少冗余:无需重复编写所有参数的等于0判断;
  2. 扩展性强:新增设置项时,只需在列表/枚举中添加一行即可,无需修改条件分支;
  3. 可读性高:参数与动作的对应关系一目了然,便于维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 12:58:04