Java, как добавить элемент вставки в начале массива аргумента переменной? - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть функция с аргументом списка строк, и я хочу вставить элемент в начале этого аргумента списка строк, чтобы я мог передать его другой функции в качестве аргумента, теперь, когда я пытаюсь следовать добавлению ArrayList, но argArr не имееттакой метод ..

ArrayList.add(0,"foo");


private void A(String... argsArr)
{
   //insert element at beginning
   B(argArr); 
}
private void B(String... argsArr)
{
}

Ответы [ 3 ]

0 голосов
/ 12 февраля 2019

String... - массив переменной длины, не a ArrayList, поэтому add(index,element) недоступно для вашего параметра 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()]));
}
0 голосов
/ 12 февраля 2019

Просто скопируйте массив в больший массив и установите 0-й индекс:

int[] second = new int[args.length + 1];
System.arraycopy(args, 0, second, 1, args.length);
second[0] = val;

Так как varargs - это массив.

0 голосов
/ 12 февраля 2019

Если вы хотите использовать массив переменных аргументов, вы можете создать новый массив со вставленным элементом.Например, используя потоки:

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