Мне нужно отсортировать коллекцию объектов 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);
}
}
В идеале я хочу иметь список всех уникальных артефактов, отсортированных по уровню. Как мне это сделать?
-ea
- person ratchet freak   schedule 10.05.2012