Java s'Chaîne CompareTo comme un objet de comparaison
Je voudrais de tri et de recherche binaire statique tableau de chaînes de caractères via la Chaîne.CompareTo comparateur.
Le problème est que le tri, le binaire et de la recherche exige qu'un Comparateur objet d'être transmis à -- Alors, comment puis-je passer dans le bâti de la chaîne comparateur?
Vous devez vous connecter pour publier un commentaire.
La
Arrays
classe a des versions desort()
etbinarySearch()
qui ne nécessitent pas uneComparator.
Par exemple, vous pouvez utiliser la version deTableaux.sort()
qui prend juste un tableau d'objets. Ces méthodes s'appellent lescompareTo()
méthode des objets dans le tableau.Vous pouvez écrire votre propre comparateur de
Comparator
est un type générique, de sorteExampleComparator
devrait probablement mettre en œuvreComparator<String>
pour éviter les mises en garde.-1
dans le cas oùobj1==null && obj2==null
, si?Solution pour Java 8 sur la base java.util.Comparateur.la comparaison de(...):
ou
Si vous ne le trouvez-vous besoin d'un
Comparator
, et que vous utilisez déjàGoyave
, vous pouvez utiliserde la Commande.naturel()
.C'est un générique
Comparator
pour tout type deComparable
objet, pas seulementString
:Comment l'utiliser avec
String
:Encore une fois, n'ont pas besoin du comparateur pour
Arrays.binarySearch(Object[] a, Object key)
aussi longtemps que les types d'objets sont comparables, mais avec les expressions lambda, c'est maintenant plus facile.Il suffit de remplacer la comparaison avec la méthode de référence:
String::compareTo
E. g.:
Vous pouvez également utiliser
mais avant même lambdas, il y avait toujours anonyme classes:
Aussi, si vous voulez comparaison sensible à la casse, dans les versions récentes de Java le
String
classe contient unepublic static final
champ appeléCASE_INSENSITIVE_ORDER
qui est de typeComparator<String>
, comme je l'ai découvert tout récemment. Ainsi, vous pouvez faire votre travail à l'aide deString.CASE_INSENSITIVE_ORDER
.Ok c'est quelques années plus tard, mais avec java 8, vous pouvez utiliser le Comparateur.naturalOrder():
http://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html#naturalOrder--
De javadoc:
Retourne un comparateur qui compare les objets Comparables dans l'ordre naturel.
Le retour de l'comparateur est sérialisable et jette NullPointerException lors de la comparaison de la valeur null.
Nous pouvons utiliser la Chaîne de caractères.CASE_INSENSITIVE_ORDER comparateur pour comparer les chaînes insensibles à la casse de l'ordre.
De généraliser la bonne réponse de Mike Nakis avec
String.CASE_INSENSITIVE_ORDER
, vous pouvez également utiliser :Voir Collateur
Concernant Nambari de réponse il y avait une erreur. Si vous comparez les valeurs en utilisant le double signe égal == programme n'atteindra jamais la méthode de comparaison, à moins que quelqu'un va utiliser nouveau mot-clé pour créer des chaînes de l'objet qui n'est pas la meilleure pratique. Cela pourrait être un peu meilleure solution:
P. S. Merci pour les commentaires 😉