Java的如何在变量参数数组的开头加上嵌件?

问题描述 投票:2回答:3

我有一个字符串列表参数的函数,我想插入这个字符串列表参数的开始元素,以便我可以将它传递给其他函数作为参数,现在当我尝试按照加入的ArrayList但argArr有没有这样的方法。 。

ArrayList.add(0,"foo");


private void A(String... argsArr)
{
   //insert element at beginning
   B(argArr); 
}
private void B(String... argsArr)
{
}
java variadic-functions
3个回答
2
投票

如果你想使用一个变量参数数组,你可以创建一个插入的元素的新数组。例如,使用流:

private void a(String... argsArr) {
    String[] args2 = Stream.concat(Stream.of("foo"), Arrays.stream(args))
                           .toArray(String[]::new);
    b( args2 );
}

如果你愿意,你可以创建一个没有流的新阵列。下面是一个使用临时表的简单方法。

private void a(String... argsArr) {
    List<String> newList = new ArrayList<>();
    newList.add("foo");
    newList.addAll(Arrays.asList(argsArr));

    b(newList.toArray(new String[newList.size()]));
}

如果你并不需要一个变量参数数组,你可以使用一个List <>参数。这将是很好的形式向新元素插入到一个不同的列表。调用者可以提供一个不可修改的列表,或者可能不希望其列表修改。

private void a2( List<String> args ) {

    List<String> newList = new ArrayList<>( args );
    newList.add(0, "foo"); // <-- Extra O(n) time to shift elements over.

    b( newList );
}

您可以通过在现有列表的开头不插入提高常数因子的效率。

private void a2( List<String> args ) {

    List<String> newList = new ArrayList<>( );
    newList.add("foo"); 
    newList.addAll( args );

    b( newList );
}

1
投票

qazxsw POI为可变长度数组,而不是一个qazxsw POI,这String...上不可用您的ArrayList PARAM。

你需要写一些逻辑来实现你想要的。一种可能性是列举如下:

add(index,element)

1
投票

就在阵列复制到一个更大的阵列,并设置第0指数:

argsArr

由于private void A(String... argsArr){ List<String> list = Arrays.stream(argsArr).collect(Collectors.toList()); list.add(0,"New_Element_To_Be_Added"); B(list.toArray(new String[list.size()])); } 是一个数组。

© www.soinside.com 2019 - 2024. All rights reserved.