我需要按整数值“级别”对 Java 对象集合进行排序。我还需要通过“标题”确定此集合是否已经包含一个对象。
我相信集合的最佳选择是具有一组有序唯一值的 TreeSet。
我有一个具有“级别”和“标题”属性的对象。它的实现方式如下:
它覆盖 Equals 方法(用于检查对象是否已通过“标题”包含在 TreeSet 中。
代码如下所示:
@Override
public boolean equals(Object arg0) {
Artifact obj = (Artifact) arg0;
if (this.getTitle().equals(obj.getTitle())) {
return true;
}
return false;
}
@Override
public int compareTo(Artifact aThat) {
final int BEFORE = -1;
final int EQUAL = 0;
final int AFTER = 1;
if (this == aThat) return EQUAL;
if (this.level < aThat.level) return BEFORE;
if (this.level > aThat.level) return AFTER;
assert this.equals(aThat) : "compareTo inconsistent with equals.";
return EQUAL;
}
当我尝试将具有可能重复值的数组列表中的值添加到列表中时。包含似乎不起作用,并且无论如何都会将对象添加到 TreeSet 中。这是代码:
TreeSet<Artifact> subsetOfArtifacts = new TreeSet<Artifact>();
ArrayList<Artifact> allArtifacts = getArtifacts();
Iterator<Artifact> allArtifactsIter = allArtifacts.iterator();
while (allArtifactsIter.hasNext()) {
Artifact artifact = (Artifact) allArtifactsIter.next();
if (!subsetOfArtifacts.contains(artifact)) {
subsetOfArtifacts.add(artifact);
}
}
理想情况下,我希望有一个按级别排序的所有独特工件的列表。我该如何做到这一点?