Como implementar a interface comparável do Java?

Não tenho certeza de como implementar uma interface comparável em minha class abstrata. Eu tenho o seguinte código de exemplo que estou usando para tentar obter minha cabeça em torno dele:

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

Eu tenho uma class de teste que irá criar objects do tipo Animal, no entanto, eu quero ter uma interface comparável dentro desta class para que os anos mais antigos de descoberta rank mais alto do que baixo. Eu não tenho idéia de como fazer isso.

Você só precisa definir que Animal implements Comparable ou seja, public class Animal implements Comparable . E então você tem que implementar o método compareTo(Animal other) jeito que você gosta.

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

Usando essa implementação do compareTo , os animais com um maior year_discovered receberão um pedido maior. Espero que você tenha a idéia de Comparable e compareTo com este exemplo.

Você precisa:

  • Adicionar implements Comparable à declaração da class; e
  • Implemente um int compareTo( Animal a ) para executar as comparações.

Como isso:

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

Enquanto você estiver nele, sugiro lembrar alguns fatos importantes sobre os methods compareTo ()

  1. CompareTo deve ser consistente com o método equals, por exemplo, se dois objects são iguais via equals (), compareTo () deve retornar zero, caso contrário, se esses objects estiverem armazenados em SortedSet ou SortedMap, eles não se comportarão adequadamente.

  2. CompareTo () deve lançar NullPointerException se o object atual for comparado ao object nulo, em oposição a equals (), que retorna false em tal cenário.

Leia mais: http://javarevisited.blogspot.com/2011/11/how-to-override-compareto-method-in.html#ixzz4B4EMGha3

Implemente a interface Comparable na sua class e forneça a implementação do int compareTo(Animal other) em sua class. Veja este post

Você precisaria implementar a interface e definir o método compareTo (). Para um bom tutorial, vá para – Tutorials point link ou MyKongLink

Possível alternativa do código-fonte do método Integer.compare que requer a API Version 19 é:

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

Essa alternativa não exige que você use a API version 19 .

A class Emp precisa implementar a interface Comaparable, portanto, precisamos replace o 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); } } } 

Aqui está o código para implementar a interface comparável a 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 um comparador …

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

Isso pode ser feito facilmente implementando uma class pública que implemente o Comparable. Isso permitirá que você use o método compareTo, que pode ser usado com qualquer outro object ao qual você deseja comparar.

Por exemplo, você pode implementá-lo desta maneira:

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

Eu acho que isso pode resolver o seu propósito.