2017-02-15 52 views
2

我有以下代碼優化多個Java數組增加

JsonObject domainsObject = new JsonParser().parse(json).getAsJsonObject().get("data").getAsJsonObject(); 
     this.domain = domainsObject.get("main_domain").getAsString(); 

     this.domains.add(this.domain); 

     for(JsonElement domain : domainsObject.get("addon_domains").getAsJsonArray()) { 
      this.domains.add(domain.getAsString()); 
     } 

     for(JsonElement domain : domainsObject.get("parked_domains").getAsJsonArray()) { 
      this.domains.add(domain.getAsString()); 
     } 

     for(JsonElement domain : domainsObject.get("sub_domains").getAsJsonArray()) { 
      this.domains.add(domain.getAsString()); 
     } 

不過,我想,因爲它看起來就會有辦法做到這一點,而無需反對DRY適當優化。

有一種方法壓制該3個單獨的陣列和孤串中的所有成一個陣列,而無需通過手動每一個循環?

回答

3

我基本上看到兩種方式,每種方式都有其優點和侷限性。

格熱戈日Górkiewiczmenitoned一個已經,列表和循環。而不是列表我會使用一個數組:

String[] parameters = { "addon_domains", "parked_domains", "sub_domains" }; 

for(String parameter : parameters) { 
    for(JsonElement domain : domainsObject.get(parameter).getAsJsonArray()) { 
     this.domains.add(domain.getAsString()); 
    } 
} 

如果你喜歡的列表更好,使用Arrays.asList("addon_domains", "parked_domains", "sub_domains")。正如Chai T. Rex在評論中提到的那樣,您可以在該方法之外聲明該數組或列出private static final,以避免每次使用時再次構建該數組。

另一種方法是調用一個輔助方法:

addDomainsFromParameter("addon_domains"); 
addDomainsFromParameter("parked_domains"); 
addDomainsFromParameter("sub_domains"); 

(。你知道你的程序更好,可以找到我信任你自己編寫方法更好的方法名),後者的優勢是如果在某些時候你需要處理上的變化,那麼你可以在方法中添加更多的參數。

+0

對不起,我錯了。 –

+0

這個工作原理和使用最少的代碼,所以我會把這個標記爲正確的。謝謝! – Shiv

+1

第一個示例的一個建議是將其作爲方法頭上方的「靜態私有最終字符串[]」,以便每次調用方法時都不必重新創建數組。 –

3

將它們放置在列表中。

List<String> parameters = new ArrayList<>(); 
parameters.add("addon_domains"); 
parameters.add("parked_domains"); 
parameters.add("sub_domains"); 

for(String parameter : parameters) { 
    for(JsonElement domain : domainsObject.get(parameter).getAsJsonArray()) { 
     this.domains.add(domain.getAsString()); 
    } 
}