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

を持っています。

手動でループすることなく、3つの別々の配列と1つの文字列をすべて1つの配列にスカッシュする方法はありますか?

答えて

3

基本的に2つの方法があり、それぞれに利点と制限があります。

GrzegorzGórkiewiczは既に1つのリストとループを作成しました。代わりに、私は、配列を使用したいリストの:

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

最初の例の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()); 
    } 
} 
関連する問題