オブジェクトのJavaコレクションを整数値「レベル」でソートする必要があります。また、このコレクションにすでに「タイトル」でオブジェクトが含まれているかどうかを判断する必要があります。
コレクションの最良の選択は、一意の値の順序セットを持つTreeSetであると思います。
「level」属性と「title属性」を持つオブジェクトがあります。次のように同等の実装を行います。
これは、Equalsメソッドをオーバーライドします(オブジェクトが「title」によって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);
}
}
理想的には、すべての固有のアーティファクトのリストをレベル別にソートしたいと思います。どうすればこれを達成できますか?