2017-02-15 46 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()); 
    } 
}