Как динамически изменить значение списка на другой список в Java или Groovy - PullRequest
0 голосов
/ 21 ноября 2018

Например, у меня есть список, подобный приведенному ниже,

list1 = ["a","b","c"] now i want to add value to the list[1] index and that index будет другим списком, подобным

list2 = ["w", "x", "y"]

Вывод будет ["a", ["b", "w", "x", "y"], "c"]. Я не хочу заменять 1 index

Возможно ли это?

Ответы [ 4 ]

0 голосов
/ 21 ноября 2018

Ваш базовый список содержит два типа: String и List<String>

Вы можете создать список в качестве базового списка в Java, но это не очень хорошая идея, поскольку вы смешиваете типы.Это плохая практика.Вам следует избегать необработанных типов .

Вы можете использовать вспомогательный метод, например:

private static List mergeIntoList(List source, List listToAdd, int index) {
    List innerList = new ArrayList(listToAdd);
    innerList.add(0, source.get(index));

    List mergedList = new ArrayList(source);
    mergedList.set(index, innerList);

    return mergedList;
}

Пример:

 List source = Arrays.asList("a", "b", "c");
 List listToAdd = Arrays.asList("w", "x", "y");

 System.out.println(mergeIntoList(source, listToAdd, 1));

вывод: [a, [b, w, x, y], c]

Но я повторяю, вам следует избегать необработанных типов, поэтому это решение не рекомендуется

0 голосов
/ 21 ноября 2018

В Java невозможно принять тип списка1 как String.
Тип списка1 выглядит как String, и вы добавляете другой список в список1, который не является правильным.

Но это возможно, принимаявведите list1 как Object

List<Object> list1=new ArrayList<>();
list1.add("a");
list1.add("b");
list1.add("c");

List<Object> innerlist=new ArrayList<>();  //Inner List

list1.add(innerlist);

Однако это не рекомендуемый способ.

0 голосов
/ 21 ноября 2018

Вы можете добавить значение к определенному индексу, как показано ниже

    List list = new ArrayList();
    List l1 = new ArrayList();
    l1.add("3");
    l1.add("4");
    list.add("1");
    list.add("5");
    list.add(1, l1);

Пожалуйста, убедитесь, что индекс в размере списка, в противном случае получите IndexOutOfBoundsException

Пожалуйстапопробуйте ниже логики

public List replaceIndex(List original, List replace, int index) {
    Object object = original.remove(index);
    replace.add(0, object);
    original.add(index, replace);
    return original;
}
0 голосов
/ 21 ноября 2018

Это возможно, но не очень безопасно (= , не делайте этого ).Вы можете использовать список, а затем добавить свои значения, которые могут быть любым типом объекта (целочисленная строка ... или другой список).При извлечении объектов вам нужно будет проверить, к какому типу они относятся с instanceof, а затем привести их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...