Java列表中元素的唯一排列



下面的代码片段在我的项目中经常出现,我觉得一定有一个技巧可以缩短它,无论是在视觉上还是在内存方面。有什么方法可以使以下内容更加紧凑和高效?

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))));

最新更新