Java - 如何插入最终列表
Java - how to insert into final list
我有一个需要操作的对象列表。
根据对象的不同,该操作将产生新对象,需要按创建顺序将其放置在被操作的对象之前。
在正常情况下,我会创建一个新列表,然后简单地切换列表。但是,在这种特殊情况下这是不可能的,因为列表是最终的。
有没有比创建一个新列表,覆盖现有列表,然后在覆盖旧列表的所有现有元素时添加尽可能多的元素更优雅的解决方案?
更新:伪代码
我正在寻找这样的东西:
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
}
}
}
使用 ListIterator
及其 previous()
方法在当前元素之前插入。不要忘记 next()
回到原来的位置。
即使您的列表是最终列表,您也可以向其中添加元素。
这是一个例子:
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"));
}
}
我有一个需要操作的对象列表。
根据对象的不同,该操作将产生新对象,需要按创建顺序将其放置在被操作的对象之前。
在正常情况下,我会创建一个新列表,然后简单地切换列表。但是,在这种特殊情况下这是不可能的,因为列表是最终的。
有没有比创建一个新列表,覆盖现有列表,然后在覆盖旧列表的所有现有元素时添加尽可能多的元素更优雅的解决方案?
更新:伪代码
我正在寻找这样的东西:
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
}
}
}
使用 ListIterator
及其 previous()
方法在当前元素之前插入。不要忘记 next()
回到原来的位置。
即使您的列表是最终列表,您也可以向其中添加元素。 这是一个例子:
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"));
}
}