【问题标题】:How can I replace a value in a List using an iterator ( Java ) [duplicate]如何使用迭代器(Java)替换列表中的值[重复]
【发布时间】:2021-01-21 17:13:45
【问题描述】:

所以基本上我正在编写一个简单的程序,用户输入一个字符串,然后将该字符串转换为一个列表,其中倒数第二个元素的每次出现都被最后一个替换。

所以如果程序输入 a b c a b c 程序输出 a c c a c

这是我到目前为止得到的,但由于某种原因我无法运行该程序,我想知道我做错了什么。

public static void  main(String args[])
{
    
Scanner input = new Scanner (System.in);

System.out.println("Enter in list");
String s = input.nextLine();

List<String> list = new ArrayList<String>(Arrays.asList(s.split(" ")));


String replacewith;
String replace;

replacewith = list.get(list.size()-1);
replace = list.get(list.size()-2);

Iterator<String> iterator = list.iterator();
int i = 0;

while(iterator.hasNext()) {
   String value = iterator.next();
   
   if(value.equals(replace))
   {  
       iterator.remove();
       list.add(i,replacewith);
       
   }
   i++;
}

System.out.println(list);
}

【问题讨论】:

  • 迭代器期望只有对列表的修改将通过该迭代器完成(直到它完成迭代)。所以你不能在迭代没有完成的时候使用list.add(i,replacewith);
  • @Pshemo 啊我明白了,你知道我将预期值添加到该索引的另一种方法吗?
  • 老实说,我不确定我是否正确理解了您的任务。由于任务是“倒数第二个元素的每次出现都替换为最后一个”a b c a b c(6 个字符,第二个是b)如何变成a c c a c(为什么是 5 个字符?为什么a 没有被替换?)
  • 无论如何,如果你想在迭代时替换一些元素,你可以使用ListIterator而不是Iterator并调用它的set(newValue)方法。
  • @Pshemo 谢谢!我完全忘记了 List Iterator,是的,你误解了我想要做的事情,但不用担心,因为你给出了正确的解决方案。

标签: java list arraylist iterator


【解决方案1】:

您可以使用 java8 流来解决您的问题。

    String replaceWith = "c";
    String replace = "b";
    System.out.println(Arrays.asList("a", "b", "c", "a", "b", "c").stream()
            .map(c -> c.equals(replace) ? replaceWith : c)
            .collect(Collectors.toList()));

【讨论】:

  • 谢谢你,从来没有尝试过使用 java8,因为我对 java 还很陌生,但这有效!
猜你喜欢
  • 2010-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-26
  • 2012-03-23
  • 2010-12-05
  • 2015-09-12
  • 2023-03-23
相关资源
最近更新 更多