¿Cómo implementar la interfaz comparable de Java?

No estoy seguro de cómo implementar una interfaz comparable en mi clase abstracta. Tengo el siguiente código de ejemplo que estoy usando para tratar de entenderlo:

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; } } 

Tengo una clase de prueba que creará objetos de tipo Animal, sin embargo, quiero tener una interfaz comparable dentro de esta clase para que los años más antiguos de descubrimiento tengan un rango más alto que bajo. Aunque no tengo idea de cómo hacerlo.

Solo tienes que definir que Animal implements Comparable es decir, public class Animal implements Comparable . Y luego tienes que implementar el compareTo(Animal other) la manera que te guste.

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

Con esta implementación de compareTo , los animales con un año más year_discovered se ordenarán más alto. Espero que tengas la idea de Comparable y compareTo con este ejemplo.

Necesitas:

  • Añadir implements Comparable a la statement de clase; y
  • Implemente un int compareTo( Animal a ) para realizar las comparaciones.

Me gusta esto:

 public class Animal implements Comparable{ 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); } } 

Mientras estás en él, sugiero que recuerdes algunos datos clave sobre los métodos compareTo ()

  1. CompareTo debe estar en consonancia con el método igual, por ejemplo, si dos objetos son iguales a través de iguales (), all compararA () debe devolver cero; de lo contrario, si esos objetos se almacenan en SortedSet u SortedMap no se comportarán correctamente.

  2. CompareTo () debe lanzar NullPointerException si el objeto actual se compara con el objeto nulo en comparación con equals () que devuelve falso en dicho escenario.

Leer más: http://javarevisited.blogspot.com/2011/11/how-to-override-compareto-method-in.html#ixzz4B4EMGha3

Implemente la interfaz Comparable en su clase y proporcione la implementación del int compareTo(Animal other) en su clase. Ver este post

Debería implementar la interfaz y definir el método compareTo (). Para obtener un buen tutorial, vaya a: Tutoriales punto enlace o MyKongLink

La posible alternativa del código fuente del método Integer.compare que requiere API Version 19 es:

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

Esta alternativa no requiere el uso de la API version 19 .

La clase Emp necesita implementar la interfaz Comaparable, por lo que debemos Anular su método compateTo.

 import java.util.ArrayList; import java.util.Collections; class Emp implements Comparable< Emp >{ int empid; String name; Emp(int empid,String name){ this.empid = empid; this.name = name; } @Override public String toString(){ return empid+" "+name; } @Override public int compareTo(Emp o) { if(this.empid==o.empid){ return 0; } else if(this.empid < o.empid){ return 1; } else{ return -1; } } } 

 public class JavaApplication1 { public static void main(String[] args) { ArrayList a= new ArrayList(); a.add(new Emp(10,"Mahadev")); a.add(new Emp(50,"Ashish")); a.add(new Emp(40,"Amit")); Collections.sort(a); for(Emp id:a){ System.out.println(id); } } } 

Aquí está el código para implementar la interfaz comparable de Java,

 // adding implements comparable to class declaration public class Animal implements Comparable { 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); } } 

Use un comparador …

  public class AnimalAgeComparator implements Comparator { @Override public int compare(Animal a1, Animal a2) { ... } } 

Esto se puede hacer fácilmente implementando una clase pública que implemente Comparable. Esto le permitirá usar el método compareTo que se puede usar con cualquier otro objeto al que desee comparar.

por ejemplo, puede implementarlo de esta manera:

 public String compareTo(Animal oth) { return String.compare(this.population, oth.population); } 

Creo que esto podría resolver tu propósito.