2017-02-15 5 views
2

Ich habe den folgenden CodeOptimierung mehrere Java-Array Ergänzungen

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()); 
     } 

Jedoch habe ich es richtig optimieren wollen, weil es wie es scheint, wird ein Weg zu sein, diese DRY entgegenzutreten, ohne zu tun.

Gibt es eine Möglichkeit, die 3 separaten Arrays und den einzelnen String in einem Array zu zerquetschen, ohne jedes einzelne manuell zu durchlaufen?

Antwort

3

Ich sehe im Grunde zwei Möglichkeiten, jedes mit seinen Vorteilen und Einschränkungen.

Grzegorz Górkiewicz hat bereits eine, eine Liste und eine Schleife erstellt. Statt einer Liste würde ich ein Array verwenden:

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

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

Wenn Sie die Liste besser gefällt, Arrays.asList("addon_domains", "parked_domains", "sub_domains") verwenden. Wie Chai T. Rex im Kommentar erwähnt, können Sie das Array oder die Liste private static final außerhalb der Methode deklarieren, um zu vermeiden, dass es jedes Mal neu erstellt wird, wenn Sie es verwenden.

Das andere ist ein zugehöriges Verfahren zu nennen:

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

(.. Sie wissen, dass Ihr Programm besser und kann eine bessere Methode Namen finde ich vertrauen Sie die Methode selbst zu schreiben) Der Vorteil der letzteren kommt Wenn Sie zu einem bestimmten Zeitpunkt Änderungen an der Verarbeitung benötigen, können Sie der Methode weitere Parameter hinzufügen.

+0

Sorry, mein Fehler. –

+0

Dies funktioniert und verwendet den geringsten Code, also werde ich diesen als korrekt markieren. Vielen Dank! – Shiv

+1

Ein Vorschlag für das erste Beispiel ist, es als eine 'statische private finale Zeichenfolge []' direkt über dem Methodenkopf zu setzen, so dass Sie das Array nicht jedes Mal neu erstellen müssen, wenn Sie die Methode aufrufen. –

3

Platzieren Sie sie in einer Liste.

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()); 
    } 
}