9
votes

Tri des longueurs de chaîne à l'aide de comparateur

Tout en essayant de trier un tableau en fonction de ses longueurs de chaîne d'élément, je suis frappé avec une erreur de compilation. J'ai un ensemble pour commencer,

comp is not abstract and does not override abstract method   compare(java.lang.Object,java.lang.Object) in java.util.Comparator
class comp implements Comparator {
^
testa.java:59: cannot find symbol
symbol  : method sort(java.lang.String[],comp)
location: class java.util.Collections
Collections.sort(array, new comp());
^2 errors


0 commentaires

6 Réponses :


2
votes

devrait être xxx

ou même meilleur xxx

(et même pas nommer la classe qui n'est utilisée qu'une fois)


1 commentaires

Vous devez spécifier la variable de type! Comparateur



15
votes

Vous devez spécifier un paramètre de type pour comparateur pour votre implémentation au travail. XXX

dans JAVA 1.7 et plus tard, vous pouvez également simplifier le corps de cette Méthode de: xxx

aussi, collections.sort Trieres Liste objets. Puisque vous triez un tableau, vous devez utiliser arrais.sort : xxx


7 commentaires

Bonjour Lawrence .. Merci pour cela .. Cela a résolu la première erreur de compilation: mais, je n'ai toujours pas une autre erreur de compilation disant: "Impossible de trouver le symbole de symbole: méthode Trier (java.lang.string [], Comp) Lieu: Classe Java .UTIL.Collections Collections.sort (Array, Nouvelle Comp ()); " J'ai importé le paquet util *, je ne sais pas pourquoi je reçois cette erreur


Trier () prend une liste , pas un string [] tableau. Utilisez Arrays.Aslist () Pour le convertir.


Aussi, pour un comparateur plus simple, envisagez d'utiliser integer.signum (int) au lieu du si / else-if / sinon ; par exemple. retourner integer.signum (o1.length () - O2.Length ());


Merci Rob: vous avez eu raison: les données étaient des types incomptables. Je l'ai trié maintenant. Merci encore.


Cette question est trop vieille mais de toute façon ... il n'est pas nécessaire de convertir la matrice à la liste, vous pouvez le trier comme celui-ci: Arrays.sort (tableau, nouvelle Comp ());


@ROBHRUSKA Si JDK> = 1.7, on peut même utiliser integer.care (o1.length (), o2.length ()) .


Merci Robhruska, Master_ex et ChthonicProject. J'ai mis à jour la réponse en fonction de vos suggestions.



7
votes

Vous devez utiliser Arrays.sort.sort.sort () Code> Méthode si la source de données est un (code> tableau code>.

Par exemple, P>

Collections.sort(Arrays.asList(array),new Comparator<String>()
{
  public int compare(String s1,String s2)
   {
    return s1.length() - s2.length();
    }
});


0 commentaires

0
votes

J'ai eu une mission similaire récemment et je vais vous fournir un exemple supplémentaire.

import java.util.Arrays;
import java.util.Comparator;
//for more information: http://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html

/**
 *
 * @author Xilef
 */
public class StringKorter implements Comparator<String> {
    @Override
    public int compare(String s1, String s2){
        if (s1.length() > s2.length())
         return 1;
        else if (s1.length() < s2.length())
         return -1;
        else return 0;
    }
    public static void main(String[] args) {
        String[] woorden = { "boot", "kinderen", "stoel", "volwassenen", "ei", "stoel", "kop", "zeshoek", "stoel", "ei" };
        System.out.println("woorden: " + Arrays.toString(woorden));//before sorting by length
        Arrays.sort(woorden, new StringKorter());
        System.out.println("Array woorden after sorting by length: " + Arrays.toString(woorden));
    }
}


0 commentaires

3
votes

one doublures

ascendance xxx

décroissant xxx


0 commentaires

0
votes

obtenu la même chose en utilisant le flux et le comparateur comme ci-dessous -

Arrays.stream(array)
      .sorted(Comparator.comparingInt(String::length))
      .forEach(a -> System.out.print(a + " "));


0 commentaires