web-dev-qa-db-fra.com

java.lang.NoSuchMethodError: aucun tri de la méthode d'interface (Ljava/util/Comparator;); exception dans le tri arraylist android

J'essaie de trier un ArrayList en Java dans une application Android, mais cette exception est bizarre. 

Code:

eventsList.sort(new Comparator<Event>() {
        @Override
        public int compare(Event event, Event t1) {
            return event.getEventStartDate().compareTo(t1.getEventStartDate());
        }
    });

Exception:

Java.lang.NoSuchMethodError: No interface method sort(Ljava/util/Comparator;)V in class Ljava/util/List; or its super classes (declaration of 'Java.util.List' appears in /system/framework/core-libart.jar)
17
Hossam Ghareeb

ArrayList#sort() a été ajouté à l'API de niveau 24 et les temps d'exécution inférieurs à l'API de niveau 24 n'ont pas cette méthode. On dirait que votre compileSdkVersion est à 24 alors vous avez le code à compiler en premier lieu.

Utilisez Collections.sort(list, comparator) à la place.

41
laalto

Et si tu essayais

Collections.sort(eventsList, new Comparator...

Autant que je sache, ArrayList n'a pas de méthode sort.

3
mic4ael

La liste n'a pas sa propre méthode de tri, vous devez appeler 

Collections.sort() 

comme la méthode sur la liste. Si cela retourne un ClassCastError, cela signifie que la liste contient des éléments non triables. Je pense que cela devrait résoudre le problème, mais sans code complet, il est difficile de vérifier. 

3
Matt

La méthode ArrayList.sort () a été ajoutée plus tard, c'est pourquoi elle ne fonctionne pas. Nous pouvons mettre à jour la version Java (1.8) ou utiliser la méthode ci-dessous.

Collections.sort(eventList, new Comparator<Event>() {
        @Override
        public int compare(Event event, Event t1) {
            return event.getEventStartDate().compareTo(t1.getEventStartDate());
        }
});
0
Ravindra