web-dev-qa-db-fra.com

Comment implémenter l'interface comparable Java?

Je ne sais pas comment implémenter une interface comparable dans ma classe abstraite. J'ai l'exemple de code suivant que j'utilise pour essayer de comprendre: 

public class Animal{
    public String name;
    public int yearDiscovered;
    public String population;

    public Animal(String name, int yearDiscovered, String population){
        this.name = name;
        this.yearDiscovered = yearDiscovered;
        this.population = population; }

    public String toString(){
        String s = "Animal name: "+ name+"\nYear Discovered: "+yearDiscovered+"\nPopulation: "+population;
        return s;
    }
}

J'ai une classe de test qui créera des objets de type Animal, mais je souhaite disposer d'une interface comparable à l'intérieur de cette classe afin que les années de découverte les plus anciennes occupent un rang supérieur à faible. Je n'ai cependant aucune idée de la façon de s'y prendre.

88
Softey

Vous devez simplement définir ce Animal implements Comparable<Animal> c'est-à-dire public class Animal implements Comparable<Animal>. Et ensuite, vous devez implémenter la méthode compareTo(Animal other) de cette façon.

@Override
public int compareTo(Animal other) {
    return Integer.compare(this.year_discovered, other.year_discovered);
}

En utilisant cette implémentation de compareTo, les animaux avec un year_discovered supérieur seront classés plus haut. J'espère que vous aurez l'idée de Comparable et compareTo avec cet exemple.

142
user1983983

Tu dois:

  • Ajoutez implements Comparable<Animal> à la déclaration de classe; et
  • Implémentez une méthode int compareTo( Animal a ) pour effectuer les comparaisons.

Comme ça:

public class Animal implements Comparable<Animal>{
    public String name;
    public int year_discovered; 
    public String population; 

    public Animal(String name, int year_discovered, String population){
        this.name = name;
        this.year_discovered = year_discovered;
        this.population = population;
    }

    public String toString(){
     String s = "Animal name: "+ name+"\nYear Discovered: "+year_discovered+"\nPopulation: "+population;
     return s;
    }

    @Override
    public int compareTo( final Animal o) {
        return Integer.compare(this.year_discovered, o.year_discovered);
    }
}
32
MT0

Pendant que vous y êtes, je suggère de rappeler quelques faits essentiels sur les méthodes compareTo ()

  1. CompareTo doit être conforme à la méthode equals, par ex. si deux objets sont égaux via equals (), compareTo () doit renvoyer zéro, sinon si ces objets sont stockés dans SortedSet ou SortedMap, ils ne se comporteront pas correctement.

  2. CompareTo () doit générer une exception NullPointerException si l'objet actuel est comparé à un objet null, par opposition à equals (), qui renvoie la valeur false dans un tel scénario.

En savoir plus: http://javarevisited.blogspot.com/2011/11/how-to-override-compareto-method-in.html#ixzz4B4EMGha3

4
guest

Implémentez l'interface Comparable<Animal> dans votre classe et implémentez la méthode int compareTo(Animal other) dans votre classe. Voir cet article

1
Sanjeev

Vous devez implémenter l'interface et définir la méthode compareTo () . Pour un bon tutoriel, allez à - Tutorials point link Ou MyKongLink

1
Gyan

Une alternative possible du code source de la méthode Integer.compare qui nécessite API Version 19 est la suivante:

public int compareTo(Animal other) { return Integer.valueOf(this.year_discovered).compareTo(other.year_discovered); }

Cette alternative ne nécessite pas vous oblige à utiliser API version 19.

0
recepinanc

Voici le code pour implémenter une interface comparable à Java,

// adding implements comparable to class declaration
public class Animal implements Comparable<Animal>
{
    public String name;
    public int yearDiscovered;
    public String population;

    public Animal(String name, int yearDiscovered, String population)
    {
        this.name = name;
        this.yearDiscovered = yearDiscovered;
        this.population = population; 
    }

    public String toString()
    {
        String s = "Animal name : " + name + "\nYear Discovered : " + yearDiscovered + "\nPopulation: " + population;
        return s;
    }

    @Override
    public int compareTo(Animal other)  // compareTo method performs the comparisons 
    {
        return Integer.compare(this.year_discovered, other.year_discovered);
    }
}
0
Shiva