2017-02-15 3 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

Я вижу в основном два пути, каждый из которых имеет свои преимущества и ограничения.

Grzegorz Górkiewicz изменил один уже, список и цикл. Вместо списка я бы использовать массив:

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

Одно из предложений для первого примера состоит в том, чтобы поместить его как 'static private final String []' чуть выше заголовка метода, так что вам не нужно воссоздавать массив каждый раз, когда вы вызываете метод. –

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()); 
    } 
} 
Смежные вопросы