我需要按Integer值“level”对java对象集合进行排序。我还需要确定这个集合是否已经通过“title”包含了一个对象。对一个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;
}
当我尝试值从一个ArrayList与添加到列表中可能重复值的包含似乎不工作,并且对象添加到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);
}
}
我想理想地有一个按级别排列的所有独特工件的列表。我该如何做到这一点?
这将迫使你有独特的水平,以及。最好的解决方案可能是一个明显的,简单的,多步骤的方法,而不是试图将所有这些都集成到一个数据结构中。 –
是否启用断言,同时运行'-ea'开关 –