[英]Remove Entries From TreeMap, getting java.util.NoSuchElementException
I am trying to remove some entries from TreeMap using some logic. 我试图使用某些逻辑从TreeMap中删除一些条目。 This my code 这是我的代码
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();
}
}
getting Exception:- 得到异常:
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)
What is that Exception? 那是什么例外? This is the error during iteration. 这是迭代过程中的错误。 Please also suggest me a right way. 也请建议我正确的方法。
You should be checking with Iterator#hasNext()
not Iterator#next()
like so: 您应该使用Iterator#hasNext()
而不是Iterator#next()
进行检查,如下所示:
while (iter.hasNext()) {
entry = iter.next();
if (!entry.getKey().contains(search)) {
iter.remove();
}
}
You should be checking for the next element like this: 您应该检查下一个元素,例如:
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();
}
}
If you call iter.next()
when there is no next element, the NoSuchElementException
gets thrown. 如果在没有下一个元素时调用iter.next()
,则会引发NoSuchElementException
。
When you traverse to the last element, the 'next' point is NULL, so you will get NoSuchElementException when you go to the end. 当您遍历最后一个元素时,“下一个”点为NULL,因此当您结束时将获得NoSuchElementException。 Use the following code to have a try: 使用以下代码进行尝试:
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.