我是一個新手,剛開始工作的代碼,我有個任務在手,做了一些研究之後,我仍然沒能找到答案。如何優化java中有很多if語句的java函數?
我有一個使用了大量的if else語句,我的任務是優化代碼,因爲如果窩別的不是很好的編程,所以我一直在說的Java函數。
開始我還以爲switch語句是要走的路,但後來我看到了人告訴使用的地圖,我不知道是什麼地圖和網上的例子是很難甚至理解。
下面是代碼我必須優化
public static Boolean SurveyValidObject(JSONObject jSONObject) {
Boolean message = false;
if (jSONObject != null) {
Iterator it = jSONObject.keys();
ArrayList<String> keysList = new ArrayList<String>();
while (it.hasNext()) {
String key = (String) it.next();
if (key.contains("field_")) {
int i = key.indexOf("_");
String _fieldValue = key.substring(0, i + 1);
keysList.add(_fieldValue);
} else {
keysList.add(key);
}
}
ArrayList<String> userDatalist = new ArrayList<String>();
userDatalist.add("survey_id");
userDatalist.add("source_id");
userDatalist.add("sso_id");
userDatalist.add("email_id");
userDatalist.add("field_");
Boolean returnValue = keysList.containsAll(userDatalist);
Iterator iterator = jSONObject.keys();
if (returnValue) {
while (iterator.hasNext()) {
try {
String key = (String) iterator.next(); // get key
String value = jSONObject.getString(key); // get value
if (key.equals("survey_id")) {
if (value == null) {
message = false;
break;
} else {
Boolean checkInteger = value.matches("\\d+");
if (!checkInteger) {
message = false;
break;
}
}
}
if (key.equals("crm_id")) {
if (value == null) {
message = false;
break;
} else {
Boolean checkInteger = value.matches("\\d+");
if (!checkInteger) {
message = false;
break;
}
}
}
if (key.equals("source_id")) {
if (value == null) {
message = false;
break;
} else {
Boolean checkInteger = value.matches("\\d+");
if (!checkInteger) {
message = false;
break;
}
}
}
if (key.equals("sso_id")) {
if (value == null) {
message = false;
break;
} else {
Boolean checkId = value.matches("^[ A-Za-z0-9\\\"\\$%^&()!*:;<>?{}[email protected]\\/#+-/'']*$");
String compareSSOValue = "/";
if (!checkId || compareSSOValue.equals(value)) {
message = false;
break;
}
}
}
if (key.equals("email_id")) {
if (value == null) {
message = false;
break;
} else {
message = value.matches("\\b[\\w.%-'-][email protected][-.\\w]+\\.[A-Za-z]{2,4}\\b");
if (!message) {
break;
}
}
}
if (key.contains("field_")) {
int i = key.indexOf("_");
String _fieldValue = key.substring(i + 1);
Boolean checkInteger = _fieldValue.matches("\\d+");
if (checkInteger) {
message = true;
} else {
message = false;
break;
}
}
} catch (org.json.JSONException e) {
}
}
}
}
return message;
}
嘗試使用開關盒 – Abdelhak
那麼,你是否試圖優化性能(我會詢問你是否知道你有性能問題)?還是你想讓代碼更具可讀性(漂亮,優雅,簡潔等)?這是兩個完全不同的目標。 – sstan
* * *優化*,你的意思是讓它更快或更可讀? – Manu