2016-04-12 7 views
2

У меня есть список объектов, над которыми мне нужно работать.Java - как вставить в окончательный список

В зависимости от объекта операция приведет к появлению нового объекта, который должен быть размещен в порядке создания JUST перед объектом, на котором был запущен.

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

Есть ли более элегантное решение, чем создать новый список, переписать существующий список и добавить столько элементов, сколько осталось, когда все существующие элементы старого списка будут перезаписаны?

UPDATE: psuedocode

Я ищу что-то вроде этого:

class Some{ //provided 
    public final List<Thing> finalList = ... 
} 

class MyClass{ 
    void handle(Thing t, List<Thing> newThings){ 
     //do something to t 
     //probably create and add new instances of Thing to newThings 
    } 

    void handle(Some s){ 
     for(Thing t : s.finalList){ 
      List<Thing> newThings = new ArrayList<>(); 
      handle(t,newThings); 
      for(Thing nt : newThings){ 
       //insert nt into s.finalList s.th. it is immediately precedes t 
      } 
     } 
    } 
+1

пожалуйста обеспечивают некоторый код – Cootri

+0

Укажите код, как сказал Cootri – Jone

+0

В зависимости от реализации списка, 'добавить (INT индекс, E элемент)' может быть вариант. – laune

ответ

2

Используйте ListIterator и способ его previous() вставить перед текущим элементом. Не забудьте вернуть next() туда, откуда вы были изначально.

0

Даже если вы перечислите окончательный, вы можете добавить к нему элементы. Вот пример:

package test; 

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 

public class TestList { 

    private final List<String> list = new ArrayList<>(); 

    public static void main(String[] args) { 
     TestList testList = new TestList(); 
     testList.createTestData(); 
     testList.insertInMiddle(); 
     testList.printAll(); 
    } 

    private void printAll() { 
     System.out.println(Arrays.toString(list.toArray())); 
    } 

    //Add a item between 1.2 
    private void insertInMiddle() { 
     //Use ListIterator or your current logic to find the right index to insert at 
     list.add(1, new String("1.2")); 
    } 

    private void createTestData() { 
     list.add(new String("1")); 
     list.add(new String("2")); 
    } 
}