Как реализовать сопоставимый интерфейс Java?
Я не уверен, как реализовать comparable интерфейс в мой абстрактный класс. У меня есть следующий пример кода, который я использую, чтобы попытаться обойти его:
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;
}
}
У меня есть тестовый класс, который будет создавать объекты типа Animal, однако я хочу иметь сопоставимый интерфейс внутри этого класса, чтобы более старые годы обнаружения были выше, чем низкие. Я понятия не имею, как это сделать, хотя.
10 ответов:
вы просто должны определить, что
Animal implements Comparable<Animal>
т. е.public class Animal implements Comparable<Animal>
. И тогда вы должны реализоватьcompareTo(Animal other)
метод, который вам нравится.@Override public int compareTo(Animal other) { return Integer.compare(this.year_discovered, other.year_discovered); }
используя эту реализацию
compareTo
животные с более высокимyear_discovered
будет выше. Я надеюсь, что вы получите представление оComparable
иcompareTo
С этим примером.
вам нужно:
- добавить
implements Comparable<Animal>
к объявлению класса; и- реализовать
int compareTo( Animal 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); } }
пока вы находитесь в нем, я предлагаю вспомнить некоторые ключевые факты о методах compareTo ()
CompareTo должен быть согласован с методом equals, например, если два объекта равны через equals (), то compareTo () должен возвращать ноль в противном случае, если эти объекты хранятся в SortedSet или SortedMap, они не будут вести себя должным образом.
CompareTo () должен вызывать исключение NullPointerException, если текущий объект сравнивается с нулевым объектом, а не равен() которые возвращают false по такому сценарию.
Подробнее: http://javarevisited.blogspot.com/2011/11/how-to-override-compareto-method-in.html#ixzz4B4EMGha3
реализовать
Comparable<Animal>
интерфейс в вашем классе и обеспечить реализациюint compareTo(Animal other)
метод в вашем классе.Этот Пост
вам нужно будет реализовать интерфейс и определить метод compareTo (). Для хорошего урока перейдите к - учебники point link или MyKongLink
возможная альтернатива из исходного кода
Integer.compare
метод, который требуетAPI Version 19
- это :
public int compareTo(Animal other) { return Integer.valueOf(this.year_discovered).compareTo(other.year_discovered); }
эта альтернатива не требуют, чтобы вы использовали
API version 19
.
класс Emp должен реализовать Comaparable интерфейс, поэтому нам нужно переопределить его метод 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); } } }
вот код для реализации сопоставимого интерфейса 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); } }
использовать компаратор...
public class AnimalAgeComparator implements Comparator<Animal> { @Override public int compare(Animal a1, Animal a2) { ... } }
Это можно легко сделать, реализовав публичный класс, который реализует Comparable. Это позволит вам использовать метод compareTo, который может быть использован с любым другим объектом, с которым вы хотите сравнить.
например, вы можете реализовать это таким образом:
public String compareTo(Animal oth) { return String.compare(this.population, oth.population); }
Я думаю, это может решить вашу цель.