学习开发之条件函数
在 Java 中,"条件函数" 这个概念通常不是一种特定的语法结构,而是指根据某些条件执行不同逻辑的函数或方法。你可以使用 if-else
、switch-case
等控制流语句来实现“条件判断”,也可以结合函数式编程特性(如 Lambda 表达式)来实现更灵活的条件处理。
下面我将从几个角度介绍 Java 中与“条件函数”相关的写法和用法:
一、基础:使用 if-else 实现条件逻辑
这是最基础也是最常见的“条件函数”写法:
public class ConditionExample {public static void main(String[] args) {int score = 85;String result = checkScore(score);System.out.println(result);}public static String checkScore(int score) {if (score >= 90) {return "优秀";} else if (score >= 80) {return "良好";} else if (score >= 60) {return "及格";} else {return "不及格";}}
}
二、使用 switch-case 实现多条件分支(适用于离散值)
适用于枚举、整数等离散值的判断:
public class DayGreeting {public static void main(String[] args) {int day = 3;System.out.println(getGreeting(day));}public static String getGreeting(int day) {switch (day) {case 1: return "星期一你好";case 2: return "星期二你好";case 3: return "星期三你好";default: return "无效的星期";}}
}
三、函数式接口 + Lambda 表达式(Java 8+)
可以使用函数式接口(如 Predicate
, Function
, BiFunction
)来定义“条件函数”。
示例:使用 Predicate 判断条件
import java.util.function.Predicate;public class ConditionalFunctionExample {public static void main(String[] args) {Predicate<Integer> isPassing = score -> score >= 60;int score = 75;if (isPassing.test(score)) {System.out.println("通过");} else {System.out.println("未通过");}}
}
示例:使用 Function 根据条件返回结果
import java.util.function.Function;public class GradeEvaluator {public static void main(String[] args) {Function<Integer, String> evaluate = score -> {if (score >= 90) return "A";else if (score >= 80) return "B";else if (score >= 70) return "C";else return "D";};System.out.println(evaluate.apply(85)); // 输出 B}
}
四、策略模式模拟“条件函数”
当条件分支特别复杂时,推荐使用 策略模式(Strategy Pattern) 来替代复杂的 if-else 或 switch-case。
示例代码如下:
@FunctionalInterface
interface DiscountStrategy {double applyDiscount(double price);
}class DiscountService {private DiscountStrategy strategy;public void setStrategy(DiscountStrategy strategy) {this.strategy = strategy;}public double checkout(double price) {return strategy.applyDiscount(price);}
}public class StrategyExample {public static void main(String[] args) {DiscountService service = new DiscountService();// 普通会员折扣service.setStrategy(price -> price * 0.9);System.out.println("普通会员价格:" + service.checkout(100));// VIP 会员折扣service.setStrategy(price -> price * 0.8);System.out.println("VIP价格:" + service.checkout(100));}
}
五、自定义“条件函数”工具类
你也可以封装一个简单的条件判断工具类:
public class ConditionUtils {public static <T, R> R ifElse(T input, Predicate<T> condition, Function<T, R> trueFunc, Function<T, R> falseFunc) {return condition.test(input) ? trueFunc.apply(input) : falseFunc.apply(input);}
}// 使用示例
public class TestConditionUtils {public static void main(String[] args) {Integer num = 10;String result = ConditionUtils.ifElse(num,n -> n > 5,n -> "大于5",n -> "小于等于5");System.out.println(result); // 输出:大于5}
}
总结
方法 | 场景 | 特点 |
---|---|---|
if-else | 基础条件判断 | 简单直观 |
switch-case | 多个固定值判断 | 可读性较好 |
函数式接口(Predicate , Function ) | 动态条件处理 | 灵活、可复用 |
策略模式 | 复杂业务逻辑解耦 | 高内聚低耦合 |
工具类封装 | 多种条件通用处理 | 提高代码抽象层级 |