2017-07-05 75 views
2

我有需要字符串創建從與附加元素添加

void count(long delta, String... tags); 

我的標記,以在大多數情況下

String[] tags = { "foo_tag:Foo", 
        "bar_tag:Bar", 
        "baz_tag:Baz" 
       }; 

,只有預定義的陣列的可變參數陣列的方法現有的數組的數組一個標籤被添加到每個呼叫中​​的預定義標籤"project_id:12345"

所以計數的調用應該看起來像這樣:

count(delta, "foo_tag:Foo", "bar_tag:Bar", "baz_tag:Baz", "project_id:12345"); 

我該如何簡單地創建一個新的數組,包含我現有的一個加上附加元素而不是調用方法?

事情是這樣的假設Arrays.append方法:

count(delta, Arrays.append(tags, "project_id:12345")); 

這是存儲統計操作,而不是業務邏輯,所以我想這個操作要儘可能快。
目前,我有helper方法appendTag,但它並不顯得典雅至於我

private String[] appendTag(String[] tags, String s) 
{ 
    String[] result = new String[tags.length + 1]; 
    System.arraycopy(tags, 0, result, 0, tags.length); 
    result[result.length-1] = s; 
    return result; 
} 
+1

我想你最好加載一個數組ArrayList的然後就做一個添加(item_to_add)。那麼如果你需要一個數組,你可以調用ArrayList的ToArray()方法 – Qiqo

+0

是否有一個原因,你不使用列表,如ArrayList? 如果有的話,我會建議你已經有了相同的解決方案。 – Atspulgs

回答

3

在java中,數組的大小是固定的,所以通過附加新元素來擴展數組是不可能的。

您需要創建一個更大尺寸的新陣列,並將第一個元素複製到該陣列中,然後添加新元素,但它不是動態

我可以建議是使用Collection也許一個ArrayList你會從它內置的方法盈喜.add()

+0

是的,看起來像這是硬編碼靜態標籤值的唯一方法 –

+0

@DenisKurochkin是的,這是最乾淨和最安全的方式來做它。 –

2

有沒有簡單的方法通過一個元素擴展數組和添加新的東西。但是,如果你用一個列表的工作,而不是,你可以很容易地添加新的元素,然後調用方法時轉換爲數組:

String[] tags = { "foo_tag:Foo", 
        "bar_tag:Bar", 
        "baz_tag:Baz" 
       }; 
List<String> tagList = new ArrayList<String>(Arrays.asList(tags)); 
tagList.add("project_id:12345"); 

count(delta, tagList.toArray(new String[0])); 

如果你認爲你將有一個長期需要這一點,那麼也許考慮改變count()的實現來使用列表而不是數組。您也可以重載此方法並公開接受列表而不是數組的版本。

+0

我想過這個,但是這對於統計日誌來說操作太昂貴了 –

+0

@DenisKurochkin然後考慮重構'count()'來操作集合而不是數組。 –

+0

'count()'不是我的,它是第三方庫 –