[英]Remove Entries From TreeMap, getting java.util.NoSuchElementException
我试图使用某些逻辑从TreeMap中删除一些条目。 这是我的代码
TreeMap<String, Object> treeMap = someEntries();
Iterator<Entry<String, Object> iter = treeMap.entrySet().iterator();
Map.Entry<String, Object> entry = null;
while ((entry = iter.next()) != null) {
if (!entry.getKey().contains(search)) {
iter.remove();
}
}
得到异常:
java.util.NoSuchElementException
at java.util.TreeMap$PrivateEntryIterator.nextEntry(TreeMap.java:1113)
at java.util.TreeMap$EntryIterator.next(TreeMap.java:1151)
at java.util.TreeMap$EntryIterator.next(TreeMap.java:1146)
那是什么例外? 这是迭代过程中的错误。 也请建议我正确的方法。
您应该使用Iterator#hasNext()
而不是Iterator#next()
进行检查,如下所示:
while (iter.hasNext()) {
entry = iter.next();
if (!entry.getKey().contains(search)) {
iter.remove();
}
}
您应该检查下一个元素,例如:
TreeMap<String, Object> treeMap = someEntries();
Iterator<Entry<String, Object>> iter = treeMap.entrySet().iterator();
Entry<String, Object> entry;
while (iter.hasNext()) {
entry = iter.next();
if (!entry.getKey().contains(search)) {
iter.remove();
}
}
如果在没有下一个元素时调用iter.next()
,则会引发NoSuchElementException
。
当您遍历最后一个元素时,“下一个”点为NULL,因此当您结束时将获得NoSuchElementException。 使用以下代码进行尝试:
TreeMap<String, Object> treeMap = new TreeMap<String, Object>();
treeMap.put("a", 1);
treeMap.put("b", 2);
treeMap.put("c", 3);
treeMap.put("d", 4);
Iterator<Entry<String, Object>> iter = treeMap.entrySet().iterator();
Map.Entry<String, Object> entry = null;
while (iter.hasNext()) {
entry = iter.next();
System.out.println(entry.getKey());
if (!entry.getKey().contains("a")) {
iter.remove();
}
}
System.out.println("-----");
iter = treeMap.entrySet().iterator();
while (iter.hasNext()) {
entry = iter.next();
System.out.println(entry.getKey());
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.