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
6 Réponses :
devrait être ou même meilleur p> (et même pas nommer la classe qui n'est utilisée qu'une fois) p> p>
Vous devez spécifier la variable de type! Comparateur
Vous devez spécifier un paramètre de type pour dans JAVA 1.7 et plus tard, vous pouvez également simplifier le corps de cette Méthode de: p> aussi, comparateur code> pour votre implémentation au travail. collections.sort code> Trieres Liste code> objets. Puisque vous triez un tableau, vous devez utiliser arrais.sort code> : p>
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 () code> prend une liste code>, pas un string [] code> tableau. Utilisez Arrays.Aslist () Code> Pour le convertir.
Aussi, pour un comparateur plus simple, envisagez d'utiliser integer.signum (int) code> au lieu du si / else-if / sinon code>; par exemple. retourner integer.signum (o1.length () - O2.Length ()); code>
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 ()); Code>
@ROBHRUSKA Si JDK> = 1.7, on peut même utiliser integer.care (o1.length (), o2.length ()) code>.
Merci Robhruska, Master_ex et ChthonicProject. J'ai mis à jour la réponse en fonction de vos suggestions.
Vous devez utiliser Par exemple, P> Arrays.sort.sort.sort () Code> Méthode si la source de données est un (code> tableau code>. Collections.sort(Arrays.asList(array),new Comparator<String>()
{
public int compare(String s1,String s2)
{
return s1.length() - s2.length();
}
});
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));
}
}
one doublures strong> ascendance p> décroissant p>
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 + " "));