জাভা তুলনামূলক ইন্টারফেস কিভাবে প্রয়োগ করতে?


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। এটি আপনাকে যে পদ্ধতিটি আপনাকে বলবে তাতে কার্যকর করুন lement
কেয়ারনারভন

3
জাভা ডকুমেন্টেশনগুলির জন্য এটি এবং অন্যান্য উত্সগুলির জন্য আমার মাথাটি চেষ্টা করে দেখার চেষ্টা করেছি তবে কিছু কারণে আমি এটি বুঝতে পারি না। আমি জানি এটি সাধারণ কিছু তবে এটি those জিনিসগুলির মধ্যে একটি।
সফ্টে

অনেক উদাহরণ ক্লাসের বাইরেও তুলনা করে তবে আমি এটি ভিতরে করতে চাই।
সফ্টে

3
জাভা কনভেনশনের "Year_discected" তে পরিবর্তনশীল নাম "Year_discected" পরিবর্তন করার বিষয়টিও বিবেচনা করুন।
tstorms

আমি বছরটি আবিষ্কার করেছি বছর অনুসারে আবিষ্কার করেছি। স্ব-শিখানো অজগর থেকে ভয়ঙ্কর অভ্যাস। আপনাকে ধন্যবাদ
সফ্টে

উত্তর:


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
অ্যান্ড্রয়েডে এটি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. CompareTo অবশ্যই সমান পদ্ধতির সাথে সামঞ্জস্যপূর্ণ হতে হবে উদাহরণস্বরূপ যদি দুটি বস্তু সমান () এর মাধ্যমে সমান হয় তবে সেখানে তুলনা করুন () অবশ্যই শূন্যে ফিরে আসতে হবে অন্যথায় যদি সেই বস্তুগুলি सॉোর্টসেট বা সোর্টার্ড ম্যাপে সঞ্চিত থাকে তবে তারা সঠিকভাবে আচরণ করবে না।

  2. CompareTo () অবশ্যই নলপয়েন্টারএক্সসেপশন নিক্ষেপ করতে হবে যদি বর্তমান বস্তুটি নলের সাথে তুল্য হয়ে যায় সমান () এর বিপরীতে যা এই জাতীয় দৃশ্যে মিথ্যা প্রত্যাবর্তন করে।

আরও পড়ুন: 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
স্ট্রিংটির তুলনা নেই
কেনেডি নায়াগা

আপনার কোডটি এখানে পেস্ট করার আগে আপনার পরীক্ষা করা উচিত।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.