J'essaie d'écrire une méthode Tiebreaker en Java qui retournera une entrée basée sur une valeur dans un comparateur code>. Ceci est la méthode abstraite:
@Override
protected Comparator<Map.Entry<Team, Stats>> getLeagueTableEntryComparator() {
return (Map.Entry<Team, Stats> teamStatsEntryOne, Map.Entry<Team, Stats> teamStatsEntryTwo) -> {
int compare = Integer.compare(teamStatsEntryOne.getValue().getPoints(),
teamStatsEntryTwo.getValue().getPoints());
if (compare == 0) {
compare = Integer.compare(teamStatsEntryOne.getValue().getTotalGoalDifference(),
teamStatsEntryTwo.getValue().getTotalGoalDifference());
if (compare == 0) {
compare = Integer.compare(teamStatsEntryOne.getValue().getGoalsFor(),
teamStatsEntryTwo.getValue().getGoalsFor());
}
return compare;
};
}
}
3 Réponses :
comparer = 0 code> Les objets moyens sont égaux et il n'est pas nécessaire de les échanger (dans le tri) p>
Si le comparateur renvoie 0, les deux entrées sont considérées comme équivalentes. Il est alors à vous de décider de quoi faire avec ces connaissances - vous pouvez choisir au hasard entre les deux éléments équivalents ou simplement appliquer le même traitement à chacun (par exemple, dans cette usecase, si les deux équipes sont indiscernables les unes des autres, vous pourrait décider de choisir au hasard entre eux, déclarez-les comme des co-champions ou même décider qu'ils devraient jouer un jeu de disjoncteur. P>
Notez que vous ne devez jamais introduire une partie aléatoire dans le code du comparateur, cependant, cela entraînera le comportement du comparateur non déterministe et violer le contrat de comparateur général. P>
Merci, que suggéreriez-vous d'être la meilleure façon de choisir entre deux entrées au hasard sans remplacer le code ci-dessus?
Le comportement qui se produit lorsque le comparateur renvoie 0 dépend de comment vous utilisez le comparateur em>. Si vous utilisez le comparateur pour trier une liste avec Si vous voulez randomiser la commande Dans ce scénario, vous pouvez utiliser si vous n'avez que deux éléments et que vous voulez les comparer, vous pouvez appeler collections.sort code> ou
list.sort.sort code>, le comparateur renvoyant 0 signifie que
Trier code> doit laisser les éléments dans leur commande d'origine. p>
collections.shuffle code> pour réorganiser la liste avant de le trier. Cela garantit que tous les articles "équivalents" ont la même chance de sortir en premier. P>
Comparez CODE> directement et brisez les liens de quelle manière que vous voulez si le résultat est égal à zéro. Par exemple, pour un choix aléatoire, vous pouvez utiliser une instance de la classe code> aléatoire code> p>