java 从现有数组创建一个添加了其他元素的数组

pod7payv  于 2023-08-02  发布在  Java
关注(0)|答案(2)|浏览(109)

我有一个方法,它接受字符串的vararg数组

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

字符串
我有一个预定义的数组标记的大多数情况下

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


并且在每个调用中只有一个标签要被添加到预定义的标签"project_id:12345"
所以count的调用应该是这样的:

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


我如何简单地创建一个新数组,包含我现有的一个加上额外的元素,以代替调用方法?
类似于假设的Arrays.append方法:

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


这是存储统计信息的操作,而不是业务逻辑,所以我希望这个操作尽可能快。
目前,我有一个辅助方法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;
}

fcwjkofz

fcwjkofz1#

在java中,数组的大小是固定的,所以不可能通过添加新元素来扩展数组
你需要创建一个更大的新数组,并将第一个元素复制到其中,然后向其中添加新元素,但它还不是动态的。
我的建议是使用**Collection也许是ArrayList,您将受益于其内置方法,如.add()**

0s0u357o

0s0u357o2#

没有简单的方法将数组扩展一个元素并添加新元素。但是如果你使用的是列表,你可以很容易地添加一个新元素,然后在调用方法时将其转换为数组:

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()的实现,使用一个列表而不是数组。你也可以重载这个方法,并公开一个接受列表而不是数组的版本。

相关问题