Вот пример использования Comparator
для сортировки на основе внешних критериев:
import java.util.*;
class VoteComparator implements Comparator<String> {
final Map<String, Integer> tally;
VoteComparator(Map<String, Integer> tally) {
this.tally = tally;
}
@Override public int compare(String pub1, String pub2) {
int v1 = tally.get(pub1);
int v2 = tally.get(pub2);
return
(v1 < v2) ? -1 :
(v1 > v2) ? +1 :
0;
}
};
Для простоты здесь используется String
; Вы хотите отсортировать Publication
в своем приложении. Здесь также используется простой int
для подсчета голосов, но, по сути, должна существовать служба подсчета, которая дает вам, учитывая Publication
, то, что составляет Vote
счет.
Примечание: английский не мой родной язык, поэтому, возможно, слово "подсчет" не подходит для него, но в основном это своего рода регистратор голосов, регистратор голосов, по сути, карта между объектом и тем, сколько голосов он получает .
Затем вы можете сортировать, используя, скажем, TreeSet
.
public class SortExample {
public static void main(String[] args) {
Map<String, Integer> tally = new HashMap<String, Integer>();
tally.put("foo", 42);
tally.put("bar", 13);
tally.put("Fizz", 3);
tally.put("Buzz", 5);
tally.put("FizzBuzz", 15);
Comparator<String> voteComparator = new VoteComparator(tally);
SortedSet<String> sortedByVote = new TreeSet<String>(voteComparator);
sortedByVote.addAll(tally.keySet());
for (String pub: sortedByVote) {
System.out.println(pub + " (" + tally.get(pub) + " votes)");
}
}
}
Это печатает:
Fizz (3 votes)
Buzz (5 votes)
bar (13 votes)
FizzBuzz (15 votes)
foo (42 votes)