metodo - ¿Cómo implementar la interfaz comparable de Java?
implementar compare to java (10)
Aquí está el código para implementar la interfaz comparable de 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);
}
}
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.
Debería implementar la interfaz y definir el método compareTo (). Para obtener un buen tutorial, vaya a: Tutoriales punto enlace o MyKongLink
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.
Implemente la interfaz Comparable<Animal>
en su clase y proporcione la implementación del int compareTo(Animal other)
en su clase. Ver este post
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<Emp> a= new ArrayList<Emp>();
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);
}
}
}
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
.
Mientras estás en él, sugiero que recuerdes algunos datos clave sobre los métodos compareTo ()
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.
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
Necesitas:
- Añadir
implements Comparable<Animal>
a la declaración de clase; y - Implemente un
int compareTo( Animal a )
para realizar las comparaciones.
Me gusta esto:
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);
}
}
Solo tienes que definir que Animal implements Comparable<Animal>
es decir, public class Animal implements Comparable<Animal>
. 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.
Use un comparador ...
public class AnimalAgeComparator implements Comparator<Animal> {
@Override
public int compare(Animal a1, Animal a2) {
...
}
}