เครื่องมือเปรียบเทียบ Java สำหรับตรรกะที่กำหนดเองอย่างง่าย

ฉันจะค้นหาบรรทัด 4,1 และ 6 ในตัวอย่างด้านล่างได้อย่างไร
และการใช้ Collection.sort() กับ Comparator สมเหตุสมผลในกรณีนี้หรือไม่

       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 

ตัวอย่างด้านบนคือรายการที่มีออบเจ็กต์ตรงตามเกณฑ์ต่อไปนี้:
- ทุกออบเจ็กต์มีจำนวนเต็ม 4 ตัว(a,b,c,d),
- ทุกออบเจ็กต์ในรายการไม่ซ้ำกัน
- a ‹ ข และ ค ‹ ง


ด้านล่างนี้ไม่ใช่ตัวอย่างที่ใช้งานได้ แต่เป็นวิธีคิดของฉัน ฉันจะคาดหวังให้ตัวเปรียบเทียบทำงานอย่างไรในการค้นหาวัตถุที่คาดหวัง

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 แหล่งที่มา
comment
นี่จะเป็นการบ้านเหรอ?   -  person Thorbjørn Ravn Andersen    schedule 15.09.2010
comment
มีอะไรพิเศษเกี่ยวกับบรรทัดที่ 1,4 และ 6?   -  person Eyal Schneider    schedule 15.09.2010
comment
คุณกำลังจัดการกับวัตถุประเภทใด? ... คำถามมากมายหมายความว่าคำถามของคุณไม่ดี!   -  person pstanton    schedule 15.09.2010
comment
พิเศษ นี่คือวัตถุที่ฉันต้องรวมในรายการของฉันให้เป็นบรรทัดเดียว/วัตถุ --›(1 - 12 - 11 - 22)   -  person jackdaniels    schedule 15.09.2010
comment
@psanton: วัตถุทั่วไปที่มีค่าจำนวนเต็ม 4 ค่า คำถามไม่เลวดูเหมือนว่าจะยาก!? ;-)   -  person jackdaniels    schedule 15.09.2010
comment
สำหรับบริบท นี่เป็นการติดตามผลของ stackoverflow.com/questions/ 3712669/   -  person Péter Török    schedule 15.09.2010
comment
บรรทัดที่ 5 ยังมีค่าที่ไม่ซ้ำกันสี่ค่าด้วย a‹b และ c‹d คุณหมายถึง a‹b‹c‹d ใช่หรือไม่?   -  person DJClayworth    schedule 15.09.2010
comment
คลาสตัวเปรียบเทียบไม่พบสิ่งต่าง ๆ แต่จะเปรียบเทียบสิ่งต่าง ๆ   -  person DJClayworth    schedule 15.09.2010
comment
คุณได้ดู Java Docks สำหรับอินเทอร์เฟซตัวเปรียบเทียบแล้วหรือยัง? ฉันจะเริ่มต้นที่นั่น คุณเขียนรหัสอะไร? คุณติดอยู่ที่ไหน? เราไม่ต้องการทำงานให้คุณ แต่เรายินดีอย่างยิ่งที่จะช่วยเหลือหากคุณประสบปัญหากับบางอย่างที่ไม่ได้ผล   -  person aperkins    schedule 15.09.2010
comment
@DJClayworth: โอเค ขอบคุณ บางทีคุณอาจยังมีความคิดอยู่ว่าฉันจะนิยามได้อย่างไร ตัวเปรียบเทียบที่ให้ผลลัพธ์ที่แท้จริงสำหรับการเปรียบเทียบบรรทัดที่ 1 และ 4 ??   -  person jackdaniels    schedule 15.09.2010
comment
@jackdaniels คุณยังไม่ได้บอกเราว่ามันเกี่ยวกับบรรทัดที่ 1 และ 4 ที่ทำให้คุณต้องการให้พวกเขาเปรียบเทียบ 'เท่ากัน' ในขณะที่บรรทัดอื่นเปรียบเทียบ 'ไม่เท่ากัน' หรือคุณเพียงต้องการทราบวิธีเขียน Comparator โดยทั่วไป?   -  person DJClayworth    schedule 16.09.2010
comment
@DJClayworth: เฉพาะบรรทัดเช่น a==b==c==d จะไม่ซ้ำกัน และไม่มีเงื่อนไขเช่น a‹b‹c‹d ระหว่าง a‹b และ c‹d เป็นเพียงเงื่อนไขเดียวเท่านั้นที่จะต้องมีช่วงเวลาเท่ากัน (b-a)==(d-c) แต่สิ่งนี้ทำให้ทุกออบเจ็กต์ในรายการตรงตามเกณฑ์นี้แล้ว   -  person jackdaniels    schedule 16.09.2010
comment
@pstanton: ไม่ Anton นี่ไม่ใช่ปริศนา มันเป็นเพียงคำถามจริงว่าจะค้นหาแถวนี้ได้อย่างไรด้วยความช่วยเหลือของภาษา java prog ขออภัยหากฟังดูไร้สาระมาก..   -  person jackdaniels    schedule 16.09.2010
comment
@aperkins: ใช่ ฉันดู Javadocs และรวบรวมตัวอย่างมากมาย แต่อธิบายเฉพาะวิธีเปรียบเทียบค่าที่เท่ากัน/ไม่เท่ากันเท่านั้น อย่างไรก็ตาม ผู้เชี่ยวชาญหลายคนแนะนำให้ใช้เครื่องมือเปรียบเทียบ/เครื่องมือเปรียบเทียบ วิธีของฉันในการค้นหาแถวนี้คือ 1.) เปรียบเทียบค่าของ obj1.b และ obj2.a และ obj1.d และ obj2.c จากนั้นในขั้นตอนที่ 2.. หาก obj1.b == obj2.a-1 และ obj1.d == obj2.c-1 ฉันสามารถรวมวัตถุนี้ได้ คำถามของฉันเกี่ยวกับวิธีกำหนดตรรกะนี้ด้วยความช่วยเหลือของตัวเปรียบเทียบ   -  person jackdaniels    schedule 16.09.2010


คำตอบ (2)


สิ่งที่คุณต้องทำคือติดตั้งอินเทอร์เฟซตัวเปรียบเทียบ ค้นหา JavaDocs สำหรับอินเทอร์เฟซนั้น คุณจะต้องเขียนคลาสที่ ใช้งาน อินเทอร์เฟซนั้น สิ่งนี้เกี่ยวข้องกับการเขียนวิธีหนึ่ง (คุณไม่จำเป็นต้องปรับใช้เท่ากับ ()) ใหม่

วิธีการส่งผ่านวัตถุสองชิ้น ดูค่าที่คุณต้องการส่งคืนจากวิธีการเพื่อแสดงทั้งสองวัตถุที่ 'เท่ากัน' ตามความต้องการของคุณ จากนั้นเขียนโค้ดเพื่อส่งคืนค่านั้นเมื่อมีค่า 'เท่ากัน' ตามความต้องการของคุณ

หากสิ่งใดไม่ชัดเจน คุณจะต้องค้นหาหนังสือเรียน Java พื้นฐานเกี่ยวกับวิธีการเขียน การเขียนคลาส หรือการใช้อินเทอร์เฟซ

person DJClayworth    schedule 15.09.2010

ดูเหมือนว่าคุณจะสับสนว่าคุณจะใช้เครื่องมือเปรียบเทียบที่ไหน DJClayworth อธิบายอย่างชัดเจนถึงวิธีการสร้างมันขึ้นมา คุณจะใช้ one in เป็นตัวอย่างในกลไกการเรียงลำดับ:

Collections.sort(myList, myComparator);

คุณใช้สิ่งนี้เนื่องจากคุณสามารถกำหนดอัลกอริธึมการเปรียบเทียบเพื่อจัดเรียงคอลเลกชันได้ หวังว่านี่จะช่วยชี้แจงได้บ้าง

person aperkins    schedule 15.09.2010
comment
ขอบคุณแอปเพอร์กินส์ ฉันไม่สับสนจริงๆว่าจะใช้ตัวเปรียบเทียบได้ที่ไหน (ในกรณีของรายการ) แต่จะอธิบายเกณฑ์การจับคู่กับตัวเปรียบเทียบในภาษาเปรียบเทียบได้อย่างไร - person jackdaniels; 16.09.2010
comment
ฉันสับสนจริงๆ หากคิดถึงวิธีลดขนาดรายการด้วยการรวมวัตถุเข้าด้วยกัน ด้วยวิธีนี้ ฉันต้องสร้างรายการที่ 2 วนซ้ำค่าการรับมือรายการที่ 1 ของอ็อบเจ็กต์ที่ตรงกัน และเรียกใช้โดยเมธอด Collection.sort() ที่ตรงกันทุกรายการ สำหรับรายการที่ใหญ่กว่านี้ดูเหมือนจะไม่ใช่วิธีแก้ปัญหาที่สมบูรณ์แบบ หากมีใครสนใจด้านล่างนี้คือลิงค์สำหรับคำอธิบายเบื้องต้นของปัญหาทั้งหมด ลิงก์:stackoverflow.com/questions/3712669/ - person jackdaniels; 16.09.2010