pembanding java untuk logika khusus sederhana

Bagaimana saya dapat menemukan baris 4,1 dan 6 pada contoh di bawah ini?
Dan apakah penggunaan Collection.sort() dengan Comparator masuk akal dalam kasus ini?

       a -  b - c - d

1.)    6    8   16  18   
2.)    38  40   55  57  
3.)    6    8   25  27  
4.)    1    5   11  15  
5.)    6    8    3   5  
6.)    9   12   19  22   
7.)    18  20    1   3  
8.)    23  25   15  17 

Contoh di atas adalah Daftar dengan objek yang memenuhi kriteria berikut:
- setiap objek berisi 4 bilangan bulat (a,b,c,d),
- setiap objek dalam daftar unik,
- a ‹ b dan c ‹ d.


Di bawah ini bukanlah contoh yang berfungsi, tetapi cara berpikir saya, bagaimana saya mengharapkan komparator berfungsi untuk menemukan objek yang diharapkan.

public class Row_Filter implements Comparable<Row_Filter>{
    int a,b,c,d;
    public Row_Filter(int a, int b, int c, int d) {
        this.a = a; this.b = b; this.c = c; this.d = d;
    }
   static class FilterAccordingAB implements Comparator<Row_Filter> {
        public int compare(Row_Filter o1, Row_Filter o2) {
            return o2.a - o1.b+1;
        }
    }
   static class FilterAccordingCD implements Comparator<Row_Filter> {
        public int compare(Row_Filter o1, Row_Filter o2) {
            return o2.c - o1.d+1;
        }
    }
   static class FilterAccordingABCD implements Comparator<Row_Filter> {
        public int compare(Row_Filter o1, Row_Filter o2) {
            FilterAccordingAB abF=null;    FilterAccordingCD cdF=null;
            if((abF.compare(o1, o2)==0) && (cdF.compare(o1, o2)==0)){
                return 1;
            }
            return -1;
        }
    }
} 

person jackdaniels    schedule 15.09.2010    source sumber
comment
Apakah ini akan menjadi pekerjaan rumah?   -  person Thorbjørn Ravn Andersen    schedule 15.09.2010
comment
Apa yang spesial dari baris 1,4 dan 6?   -  person Eyal Schneider    schedule 15.09.2010
comment
tipe objek apa yang Anda hadapi? ... begitu banyak pertanyaan berarti pertanyaan Anda buruk!   -  person pstanton    schedule 15.09.2010
comment
Istimewanya, ini adalah objek yang harus saya gabungkan dalam daftar saya menjadi satu baris/objek --›(1 - 12 - 11 - 22).   -  person jackdaniels    schedule 15.09.2010
comment
@psanton: objek generiknya dengan 4 nilai integer. Pertanyaannya lumayan, sepertinya sulit!? ;-)   -  person jackdaniels    schedule 15.09.2010
comment
Untuk konteksnya, ini adalah tindak lanjut dari stackoverflow.com/questions/ 3712669/   -  person Péter Török    schedule 15.09.2010
comment
Baris 5 juga memiliki empat nilai unik dengan a‹b dan c‹d. Apakah maksud Anda a‹b‹c‹d?   -  person DJClayworth    schedule 15.09.2010
comment
Kelas pembanding tidak menemukan sesuatu, mereka membandingkan sesuatu.   -  person DJClayworth    schedule 15.09.2010
comment
Pernahkah Anda melihat Java Docks untuk antarmuka Comparator? Saya akan mulai dari sana. Kode apa yang sudah kamu tulis? Di mana kamu terjebak? Kami tidak ingin melakukan pekerjaan Anda untuk Anda, namun kami dengan senang hati akan membantu jika Anda terjebak dengan sesuatu yang tidak berfungsi.   -  person aperkins    schedule 15.09.2010
comment
@DJClayworth: Oke terima kasih, mungkin Anda masih punya satu ide bagaimana saya bisa mendefinisikan, pembanding yang memberi saya hasil sebenarnya untuk membandingkan baris 1 dan 4??   -  person jackdaniels    schedule 15.09.2010
comment
@jackdaniels Anda masih belum memberi tahu kami tentang baris 1 dan 4 yang membuat Anda ingin keduanya membandingkan 'sama' sementara baris lain membandingkan 'tidak setara'. Atau Anda hanya ingin mengetahui cara menulis Komparator secara umum?   -  person DJClayworth    schedule 16.09.2010
comment
@DJClayworth: hanya baris seperti a==b==c==d yang tidak unik. Dan tidak ada kondisi seperti a‹b‹c‹d. Antara a‹b dan c‹d hanya ada satu syarat keduanya harus mempunyai interval yang sama (b-a)==(d-c). Tapi ini sudah membuat setiap objek dalam daftar memenuhi kriteria ini.   -  person jackdaniels    schedule 16.09.2010
comment
@pstanton: Tidak, Anton, ini bukan teka-teki, ini hanya pertanyaan nyata bagaimana menemukan baris ini dengan bantuan bahasa prog Java. Maaf jika kedengarannya terlalu bodoh..   -  person jackdaniels    schedule 16.09.2010
comment
@aperkins: Ya, saya melihat Javadocs dan menyisir banyak contoh. Namun hanya menjelaskan cara membandingkan nilai yang sama/tidak sama. Namun banyak profesional yang menyarankan untuk menggunakan pembanding/pembanding. Cara saya menemukan baris ini adalah, 1.) membandingkan nilai obj1.b dan obj2.a dan obj1.d dan obj2.c. Dan kemudian pada langkah ke-2.. Jika obj1.b == obj2.a-1 dan obj1.d == obj2.c-1, maka saya dapat menggabungkan objek ini. Pertanyaan saya hanyalah tentang bagaimana mendefinisikan logika ini dengan bantuan pembanding.   -  person jackdaniels    schedule 16.09.2010


Jawaban (2)


Yang perlu Anda lakukan adalah mengimplementasikan antarmuka Komparator. Cari JavaDocs untuk antarmuka itu. Anda perlu menulis kelas yang mengimplementasikan antarmuka tersebut. Ini melibatkan penulisan satu metode (Anda tidak perlu mengimplementasikan ulang sama dengan()).

Metode ini melewati dua objek. Lihatlah nilai apa yang perlu Anda kembalikan dari metode ini untuk menunjukkan kedua objek 'sama' sesuai dengan kebutuhan Anda. Kemudian tulis kode untuk mengembalikan nilai tersebut ketika nilainya 'sama', sesuai dengan kebutuhan Anda.

Jika ada yang tidak jelas, Anda perlu mencari buku teks dasar Java tentang metode menulis, kelas menulis, atau penggunaan antarmuka.

person DJClayworth    schedule 15.09.2010

Sepertinya Anda bingung di mana Anda akan menggunakan pembanding. DJClayworth menjelaskan dengan tepat BAGAIMANA cara membuatnya. Anda akan menggunakannya, misalnya, dalam mekanisme pengurutan:

Collections.sort(myList, myComparator);

Anda menggunakan ini karena Anda dapat menentukan algoritma perbandingan untuk menyortir koleksi. Semoga ini bisa membantu memperjelas.

person aperkins    schedule 15.09.2010
comment
Terima kasih Aperkins. Saya tidak terlalu bingung di mana harus menggunakan pembanding (dalam hal Daftar). Namun, bagaimana mendeskripsikan kriteria pencocokan ke pembanding dalam Bahasa Pembanding. - person jackdaniels; 16.09.2010
comment
Saya benar-benar bingung jika memikirkan cara memperkecil ukuran daftar dengan menggabungkan objek. Dengan mengikuti cara ini, saya harus membuat daftar ke-2, mengulangi daftar pertama yang mengatasi nilai objek yang cocok dan memanggil dengan setiap metode Collection.sort() yang cocok. Untuk daftar yang lebih besar, ini tampaknya bukan solusi yang efektif. Jika seseorang tertarik, di bawah ini adalah tautan untuk deskripsi awal keseluruhan masalah. Tautan:stackoverflow.com/questions/3712669/ - person jackdaniels; 16.09.2010