Mettre en œuvre Comparateur de primitives de type booléen?
J'ai besoin de quelques classes implements Comparator
, et pour celui que je veux comparer primitive boolean
(pas Boolean
) les valeurs.
SI c'était un Boolean, je voudrais juste return boolA.compareTo(boolB);
qui retourne 0, -1 ou 1. Mais comment puis-je faire cela avec les primitives?
avez-vous entendu parler de l'autoboxing?
Il y a un léger gain de performance pour l'autoboxing, de sorte que l'OP peut encore préfèrent écrire le code brut.
Comparateur de ne pas prendre de types primitifs. Telle était la question.
Comme chaque
Oui, j'ai pris ça en compte. Le coup est vraiment légère (on doit déréférencer le
Il y a un léger gain de performance pour l'autoboxing, de sorte que l'OP peut encore préfèrent écrire le code brut.
Comparateur de ne pas prendre de types primitifs. Telle était la question.
Comme chaque
boolean
qu'un objet est mis en cache, auto-boxing peut pas coûter plus que vous attendez. Note: Tous les possibles byte
est également mis en cache.Oui, j'ai pris ça en compte. Le coup est vraiment légère (on doit déréférencer le
Boolean
constante) et ne vaut probablement pas le code supplémentaire.OriginalL'auteur membersound | 2012-11-05
Vous devez vous connecter pour publier un commentaire.
Vous pouvez regarder comment il est mis en œuvre pour la
java.lang.Boolean
, depuis que classe, naturellement, utilise une primitive de type boolean:OriginalL'auteur Marko Topolnik
Depuis Java 7, la logique qui Marko Topolnik a montré dans sa réponse a déménagé dans une autre méthode pour exposer une façon de comparer les primitives
boolean
.Javadoc pour
Boolean.comparer(boolean x, boolean, y)
:non, il n'est pas. Source code est ainsi (au moins dans Java 8): public static int compare(boolean x, boolean y) { return (x == y) ? 0 : (x ? 1 : -1); }
Ouais, Wim Deblauwe est correct. La Javadoc états que c'est identique pour la suite, si vous avez comparé comme des objets. Si vous regardez Marko Topolnik et le code source de l'Oracle JDK, vous verrez que l'Oracle de la mise en œuvre est la même sont les mêmes.
OriginalL'auteur mkobit
Vous pouvez utiliser l'applet java de l'autoboxing fonctionnalité pour remédier à ce problème. Vous pouvez lire à ce sujet l'autoboxing ici: Java l'autoboxing
OriginalL'auteur Adam Arold
Une meilleure approche et l'utilisation correcte de Boolean-Adaptateur classe
EDIT:
Astuce: il trie les "fausses" valeurs premières. Si vous voulez inverser le tri utilisation:
OriginalL'auteur Code.IT
Vous pouvez comparer les deux primitives des valeurs booléennes b1 et b2 de la manière suivante.
(Boolean.valueOf(b1).equals(Boolean.valueOf(b2))
OriginalL'auteur Srikar