在Java中,偶爾會遇到這樣的情況:有很多條件需要判斷,而且滿足每個條件需要做的事情也不一樣。在寫代碼時第一想法肯定是if...else了,可當代碼寫出來後,會發現很長一串的if,else if,代碼很難看,如果當前的條件是最後一次才滿足條件,那麼程序需要去檢查每一個if裏的條件是否滿足,這樣似乎還會影響程序性能。
那麼用什麼來代替呢,很多人肯定可能會想到,肯定是switch了。網上有很多switch與if else的評論,也有將二者的性能拿出來做比較的,而在我現在工作的公司,不允許在判斷條件多的時候是用if else,更不能用switch代替if else。那究竟該怎麼辦?於是在網上找了許久答案,終於有了個方向。用map代替,map的key代表需要判斷的條件,而value則是滿足條件時需要去幹的事兒。於是,我照着自己的想法寫了如下一個關於if的工具類。
import java.util.HashMap;
import java.util.Map;
/**
* @Author: MrZcc
* @Description:用來代替if...else...的工具類
* @Date: Created in 10:31 2019-1-3
* @Modified By:
*/
public class IfFunction<K> {
//map的key代表需要判斷的條件,而value則是滿足條件時需要去幹的事兒
private Map<K, Function> map;
/**
* @Description: IfFunction需要一個映射來保存鍵和函數
* @date: 10:34 2019-1-3
* @param: map
* @return:
*/
public IfFunction(Map<K, Function> map) {
this.map = map;
}
/**
* @Description: 向集合添加鍵和功能
* @date: 10:36 2019-1-3
* @param: key 需要驗證的鍵
* @param: function 滿足鍵中條件執行的方法
* @return: com.daqsoft.resourcecenter.datashow.utils.IfFunction<K>
*/
public IfFunction<K> add(K key, Function function) {
this.map.put(key, function);
return this;
}
/**
* @Description: 確定密鑰是否存在,如果存在,則執行相應的方法
* @date: 10:40 2019-1-3
* @param: key
* @return: void
*/
public void doIf(K key) {
if (this.map.containsKey(key)) {
map.get(key).invoke();
}
}
/**
* @Description: 確定密鑰是否存在,如果存在,則執行相應的方法.否則執行defaultFunction
* @date: 10:41 2019-1-3
* @param: key
* @param: defaultFunction
* @return: void
*/
public void doIfWithDefault(K key, Function defaultFunction) {
if (this.map.containsKey(key)) {
map.get(key).invoke();
} else {
defaultFunction.invoke();
}
}
public static void main(String[] args) {
IfFunction<String> ifFunction=new IfFunction<>(new HashMap<>());
ifFunction.add("hello",()-> System.out.println("你好啊"))
.add("helloWorld",()-> System.out.println("你好啊,世界"))
.doIfWithDefault("helloWorld",()-> System.out.println("沒有找到相應的key"));
}
}
/**
* @Author: MrZcc
* @Description:
* @Date: Created in 10:32 2019-1-3
* @Modified By:
*/
public interface Function {
/**
* @Description:需要做的操作
* @date: 10:32 2019-1-3
* @param:
* @return: void
*/
void invoke();
}
參考:https://blog.csdn.net/qq_36865969/article/details/80155776