2012-12-13 118 views
0

我有希望通过用另一列表替换元素的范围,例如以更新的最新列表:是否有API用另一个列表替换列表中的一系列值?

CurrentList:

a, b, c, d, e, f, g 

NewList:

x, y, z 

我想做类似如下的事:

CurrentList.setAll(5, NewList) 

这要转变CurrentList有以下值:

a, b, c, d, e, x, y, z 

所以通过x, y取代f, g元素,也addedCurrentList额外的新z

编辑:这并不总是在列表的末尾。它不仅是关于弦乐。这是关于具有任何类型元素的列表。这需要在列表的任何部分工作。例如,我可能需要更换b, c, d。我只是拥有起始索引,然后我必须先替换元素,并且如果列表空间不足,则会列出add而不是替换。

回答

2

你所要寻找的是这样的:

List<?> list = ... // original list 
List<?> toReplace = list.subList(startingIndex, endIndex); 
toReplace.clear(); // clears the subList 
List<?> replacement = ... // list of new elements 
toReplace.addAll(replacement); // inserts the new elements in the original list, through the sublist 

您还可以逐个添加新元素。支持列表将根据需要逐渐增大。

+0

,但是这里假定'endIndex'永远不会超过原始列表的大小。我问是否可以通过提供'startsIndex'和列表中要替换的元素在一个语句中完成。 –

+0

它不假定,endIndex是* subList的结束索引来替换*。生成的subList将能够根据需要收缩和增长。我不认为这可以通过List API在'一个声明'中完成 – bowmore

4

如果你有书信集,你最好使用一个StringBuilder

StringBuilder sb = new StringBuilder("abcdefg"); 
sb.replace(5, sb.length(), "xyz"); 

如果你有元素的列表,你可以做

List<String> list = ... 
List<String> subList = list.subList(5, list.size()); 
subList.clear(); 
subList.addAll(Arrays.asList("x", "y", "z")); 
+1

不应该是'list.subList(5,list.size())。clear();'? – durron597

+0

@煞车感谢您的固定错字。 –

+0

@ durron597这是一样的事情,但更接近OP所要求的。 –

相关问题