下面的代码片段在我的项目中经常出现,我觉得一定有一个技巧可以缩短它,无论是在视觉上还是在内存方面。有什么方法可以使以下内容更加紧凑和高效?
for(Particle p1 : particleList) {
ArrayList<Particle> particleList2 = (ArrayList<Particle>) particleList.clone();
particleList2.remove(p1);
for(Particle p2 : particleList2) {
//...treatment here involving relationships between p1 and p2...
}
}
我怀疑我可以使用Iterator()
,但我不知道如何使我的代码更高效或更紧凑。
我很抱歉,如果这个问题是多余的,我真的不知道如何正确地制定问题,在网上找到这个问题的答案。
删除列表克隆的一个简单更改是跳过内部列表中的p1
,而不是删除它:
for(Particle p1 : particleList) {
for(Particle p2 : particleList) {
if (p1 == p2) {
continue;
}
//...treatment here involving relationships between p1 and p2...
}
}
你可以尝试这样做:
particleList.forEach(a -> particleList.stream()
.filter(b -> !a.equals(b))
.forEach(b -> treatment(a, b))));