我遇到了一些问题。我必须找到包含字母" r"并复制这些单词。我试着用for循环来做这个:
for(int i = 0; i < list.size(); i++){
if(list.get(i).contains("r")){
list.add(list.get(i));
}
但它根本不起作用。当我向数组中添加新元素时会让它更大吗?然后list.size会改变,循环不会设法到达数组的最后一个元素?重复单词也应该在原始单词之后,例如输入:
显示 内存 猫
输出:
显示 内存 内存 猫
我真的不知道如何复制它。
这也不起作用:
for(int i = 0; i < list.size(); i++){
if(list.get(i).contains("r")){
list.add(i+1, list.get(i));
}
答案 0 :(得分:5)
为包含字母r
的元素添加副本后,您最终会移动到该副本,因为它还包含r
,您将为其添加副本,然后在访问另一个副本后,您将为它添加另一个副本,依此类推......所以你的循环不会结束(直到你将运行内存)。
为避免这种情况,在复制元素后,您需要跳转到复制后的下一个元素。您可以在
之后通过额外递增i
来完成此操作
list.add(i+1, list.get(i));
i++;
或
list.add(++i, list.get(i));
答案 1 :(得分:1)
您可以创建原始List
的副本并向其添加元素。这样,您重复使用的列表不会改变大小。
例如:
List<String> list = Arrays.asList("show", "ram", "cat");
List<String> result = new ArrayList<>(list);
list.stream().filter(a -> a.contains("r")).forEach(a -> result.add(a));
答案 2 :(得分:1)
根据列表的类型,可以使用ListIterator
轻松实现,add
具有List<String> list = new ArrayList<>( Arrays.asList( "show", "ram", "cat" ) );
ListIterator<String> iterator = list.listIterator();
while ( iterator.hasNext() ) {
String value = iterator.next();
if ( value.contains("r") ) {
iterator.add(value);
}
}
System.out.println( list );
方法,该方法在当前元素之后添加元素,但不迭代它。 / p>
ArrayList
这个输出是:
[show, ram, ram, cat]
这适用于LinkedList
和List
,但不适用于直接来自Arrays.asList
的特定this.route.params.subscribe(newValue => ...)
,因为它是不可修改的。
答案 3 :(得分:0)
保持简单,只需使用其他List<String>
。
public static void main(String[] args) {
List<String> input = Arrays.asList("show", "ram", "cat");
List<String> result = new ArrayList<>();
for (String s : input) {
if (s != null && s.contains("r")) {
result.add(s);
}
result.add(s);
}
System.out.println(result);
}
将打印您想要的。希望它有所帮助!
答案 4 :(得分:0)
您需要找到包含字母r
的单词,然后将所有找到的单词添加到列表中:
List<String> list = Arrays.asList("black", "red", "blue");
List<String> result = list.stream()
.filter(i->i.contains("r"))
.collect(Collectors.toList());
list.addAll(result);