java заменить список на подсписок

#java #list #replace

#java #Список #заменить

Вопрос:

У меня есть список

 ArrayList list = new ArrayList(Arrays.asList(1,2,3,4,5,3,4,2,4,5,3,10));
  

И у меня есть другой подсписок

 ArrayList sublist = new ArrayList(Arrays.asList(4,5,3));
  

Я искал функциональность для замены
подсписка внутри списка

другим подсписком

 ArrayList sublist = new ArrayList(Arrays.asList(100,100)));
  

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

 list = (1,2,3,100,100,4,2,100,100,10);
  

Я не смог найти никакого API для этого в java.

Ответ №1:

Не уверен, существует ли какой-либо API для этого или нет, но то, что вы могли бы сделать, это воспользоваться интерфейсом списка в Java.

Если вы объединяете использование containsAll(Collection c), возвращает true, если этот список содержит все элементы указанной коллекции.

removeAll(коллекция c) Удаляет из этого списка все его элементы, которые содержатся в указанной коллекции (необязательная операция).

и

addAll(int index, Collection c) Вставляет все элементы из указанной коллекции в этот список в указанной позиции (необязательная операция).

Я думаю, вы можете легко выполнить то, что вам нужно.

Взгляните сюда: http://download.oracle.com/javase/6/docs/api/java/util/List.html

Комментарии:

1. Это просто проверит / удалит / добавит отдельные элементы переданной коллекции, но не будет рассматривать их как единый список. Например. в примере, найденном внутри вопроса, это приведет к удалению ВСЕХ 4s, 5s и 3s.

Ответ №2:

Если вы создадите подсписок как истинный подсписок list , например, используя List#subList() , то (неструктурные) изменения, внесенные в sublist , будут отражены list .

 List<Integer> list = Lists.newArrayList(1, 2, 3, 4, 5, 3, 4, 2, 4, 5, 3, 10);
List<Integer> sublist = list.subList(3, 6);

for (int i=0; i<sublist.size(); i  )
{
    sublist.set(i, 100);
}

System.out.println(sublist);
// prints 100, 100, 100
System.out.println(list);
// prints 1, 2, 3, 100, 100, 100, 4, 2, 4, 5, 3, 10
  

Демонстрация: http://ideone.com/ljvd0


Lists.newArrayList(...) происходит от Google Guava.