Вот пример использования 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)
Здесь также бесполезно. Как насчет уточнения? –