【发布时间】:2014-02-25 17:47:40
【问题描述】:
我想比较一个集合中的元素,以便合并过于相似的元素。为了赢得一些时间,我想在迭代过程中消除相似之处。 以下是我如何尝试继续:
Iterator<Personne> i1 = personnes.iterator();
while (i1.hasNext()) {
Personne personneObservee = i1.next();
Set<Personne> tmp = new HashSet<Personne>();
tmp.addAll(personnes);
Iterator<Personne> i2 = tmp.iterator();
while (i2.hasNext()) {
Personne autrePersonne = i2.next();
if (personneObservee.isSimilarTo(autrePersonne)) {
personnes.remove(autrePersonne);
}
}
result.add(personneObservee.toString());
}
正如你可以从我的存在中猜到的那样,它不起作用,给了我这个不错的堆栈跟踪:
java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:926)
at java.util.HashMap$KeyIterator.next(HashMap.java:960)
at NameDetectorWithBenefits.mergeSamePersons(NameDetectorWithBenefits.java:41)
at App.main(App.java:71)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:297)
at java.lang.Thread.run(Thread.java:744)
起初,我以为 i1 和 i2 正在迭代同一个集合,我会找到答案 here。因此,我每次都创建一个临时集。但是,它并没有解决问题。
有什么想法可能会出现问题吗?
【问题讨论】:
-
您的
isSimilarTo(Personne)与equals(Object)中的代码有何不同? -
它对不同的属性进行了一些计算,但只读取信息。