从removeTwos()
方法返回时,我似乎不能打印Iterator
中的元素。我正在尝试从列表中删除只有两个字符的元素。
public class Main {
public static void main(String[] args) {
// write your code here
List<String> list = new ArrayList<>();
list.add("hi");
list.add("what");
list.add("who");
list.add("ok");
System.out.println(removeTwos(list));
}
public static String removeTwos(List<String> stringList) {
Iterator<String> itr = stringList.iterator();
for(int i = 0; i < stringList.size(); i++) {
if(itr.hasNext() && itr.next().length() == 2) {
itr.remove();
System.out.println(itr.toString());
}
}
return itr.toString();
}
}
谢谢。
发布于 2018-09-13 05:15:17
问题是:你根本不需要Iterator
来做你想做的事情。您可以使用列表的方法逐个搜索列表中的每一项。
试试这段代码,看看它是否适合你:
public class JavaApplication255 {
public static void main(String[] args) {
// write your code here
List<String> list = new ArrayList<>();
list.add("hi");
list.add("what");
list.add("who");
list.add("ok");
removeTwos(list);
System.out.println(list);
}
public static void removeTwos(List<String> stringList){
for(int i = stringList.size() - 1; i >= 0 ; i--){
String string = stringList.get(i);
if (string.length() == 2){
stringList.remove(string);
}
}
}
}
发布于 2018-09-13 05:11:14
要使用Iterator
解决此问题,您可以将removeTwos
方法编辑为如下所示:
public static String removeTwos(List<String> stringList) {
Iterator<String> itr = stringList.iterator();
while (itr.hasNext()) {
String value = itr.next();
if (value.length() == 2) {
System.out.println(value);
itr.remove();
}
}
return stringList.toString();
}
使用Iterator
时,在循环访问列表时从列表中移除元素是安全的。Here's a link,证明它是安全的。
发布于 2018-09-13 05:11:44
除非你需要使用iter,否则使用流和过滤器是很容易的。
List<String> noTwos = list.stream().filter(s-> s.length() != 2).collect(Collectors.toList());
https://stackoverflow.com/questions/52303431
复制相似问题