जावा तुलनीय इंटरफ़ेस कैसे लागू करें?


101

मुझे यकीन नहीं है कि मेरे सार वर्ग में एक तुलनीय इंटरफ़ेस को कैसे लागू किया जाए। मेरे पास निम्नलिखित उदाहरण कोड है जो मैं कोशिश कर रहा हूं और इसके चारों ओर अपना सिर पाने के लिए उपयोग कर रहा हूं:

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

मेरे पास एक परीक्षण वर्ग है जो कि प्रकार की वस्तुओं को बनाएगा पशु हालांकि मैं इस वर्ग के अंदर एक तुलनीय इंटरफ़ेस रखना चाहता हूं ताकि खोज के पुराने वर्ष रैंक निम्न से अधिक हो। हालांकि इस बारे में मुझे कुछ पता नहीं है।


4
के लिए प्रलेखन को देखो Comparable। जिस तरीके से यह आपको बताता है, उस तरीके से इसे लागू करें।
केयर्नवोन

3
मैंने इसके और अन्य स्रोतों के लिए जावा दस्तावेज़ीकरण पर एक नज़र डाली है और इसके चारों ओर अपना सिर प्राप्त करने का प्रयास किया है, लेकिन किसी कारण से मैं इसे समझ नहीं पाया। मुझे पता है कि यह कुछ सरल है, लेकिन यह उन चीजों में से एक है।
सोफ्टी

बहुत सारे उदाहरण कक्षा के बाहर तुलना करते हैं, लेकिन मैं इसे अंदर करना चाहता हूं।
सोफ्टी

3
इसके अलावा परिवर्तनशील नाम "वर्ष_विषयक" को जाव सम्मेलन "वर्षवृत्तीय" पर विचार करें।
tstorms

मैंने वर्ष को बदलकर वर्ष को बदल दिया है। सेल्फ सिखने से भयानक आदतें सिखाई जाती हैं। धन्यवाद
Softey

जवाबों:


156

तुम बस को परिभाषित करने के लिए है 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


2
Android में यहrequires API 19
हमजेह सोबोह

वैकल्पिक है:return ((Integer)this.level).compareTo(other.level);
हम्जेह सोबोह

36

आपको:

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

6

जब आप इसमें हैं, तो मैं आपको कुछ महत्वपूर्ण तथ्यों को याद रखने की सलाह देता हूं

  1. तुलना करना समतुल्य विधि के अनुरूप होना चाहिए जैसे यदि दो वस्तुएं बराबर () के माध्यम से समान हैं, तो तुलना () को अन्यथा वापस करना होगा अन्यथा यदि उन वस्तुओं को सॉर्टसेट या सॉर्टेडैप में संग्रहीत किया जाता है तो वे ठीक से व्यवहार नहीं करेंगे।

  2. तुलना करें () NullPointerException को फेंकना होगा यदि वर्तमान ऑब्जेक्ट को null ऑब्जेक्ट की तुलना में बराबर के विपरीत मिलता है () जो इस तरह के परिदृश्य पर गलत रिटर्न देता है।

और पढ़ें: http://javarevisited.blogspot.com/2011/11/how-to-override-compareto-method-in.html#ixzz4B4EMGha3




0

Integer.compareविधि के स्रोत कोड से संभावित विकल्प जिसकी आवश्यकता API Version 19है:

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

इस विकल्प का आपको उपयोग करने की आवश्यकता नहीं है API version 19


0

कोम क्लास को कॉम्प्रैटेबल इंटरफ़ेस लागू करने की आवश्यकता होती है, इसलिए हमें इसकी कम्पेटो विधि को ओवरराइड करने की आवश्यकता होती है।

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

}

मैं एम्प आईडी के साथ इस पर काम कर रहा हूं
महादेव माने

0

यहाँ जावा तुलनीय इंटरफ़ेस को लागू करने के लिए कोड है,

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

-1

एक तुलनित्र का उपयोग करें ...

    public class AnimalAgeComparator implements Comparator<Animal> {

@Override
public int compare(Animal a1, Animal a2) {
  ...
}
}

1
ओपी पूछते हैं तुलनीय, तुलनात्मक नहीं
अबिमारन कुगथासन

लेकिन मुझे लगता है कि इस मामले में एक तुलनित्र बेहतर समाधान है। आप इसे एक नाम दे सकते हैं कि तुलनाकर्ता क्या तुलना करता है।
pL4Gu33

1
तुलनित्र होने का एकमात्र कारण विभिन्न छंटाई प्रकार हैं। अन्यथा, कक्षा को तुलनीय बनाना एक बेहतर समाधान है क्योंकि वस्तु तुलनीय है, और इसका उपयोग सीधे
ट्रेमेप

-5

यह बात आसानी से एक सार्वजनिक वर्ग को लागू करके की जा सकती है जो तुलनात्मक लागू करता है। यह आपको तुलना विधि का उपयोग करने की अनुमति देगा जिसका उपयोग किसी अन्य वस्तु के साथ किया जा सकता है, जिसकी आप तुलना करना चाहते हैं।

उदाहरण के लिए आप इसे इस तरह से लागू कर सकते हैं:

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

मुझे लगता है कि इससे आपका उद्देश्य हल हो सकता है।


3
स्ट्रिंग की तुलना नहीं है
कैनेडी न्यागा

यहां पेस्ट करने से पहले आपको अपने कोड का परीक्षण करना चाहिए।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.