คำถามติดแท็ก comparator

28
เรียงลำดับ ArrayList ของวัตถุที่กำหนดเองตามคุณสมบัติ
ฉันอ่านเกี่ยวกับการเรียงลำดับ ArrayLists โดยใช้ Comparator แต่ในตัวอย่างทั้งหมดที่ผู้คนใช้compareToซึ่งอ้างอิงจากการวิจัยบางอย่างเป็นวิธีสำหรับสตริง ฉันต้องการเรียงลำดับ ArrayList ของวัตถุที่กำหนดเองโดยหนึ่งในคุณสมบัติของพวกเขา: วัตถุวันที่ ( getStartDay()) โดยปกติแล้วฉันจะเปรียบเทียบพวกเขาด้วยitem1.getStartDate().before(item2.getStartDate())ดังนั้นฉันจึงสงสัยว่าฉันจะเขียนสิ่งที่ชอบได้ไหม: public class CustomComparator { public boolean compare(Object object1, Object object2) { return object1.getStartDate().before(object2.getStartDate()); } } public class RandomName { ... Collections.sort(Database.arrayList, new CustomComparator); ... }
1145 java  sorting  date  comparator 

11
“ วิธีการเปรียบเทียบละเมิดสัญญาทั่วไป!”
มีใครช่วยอธิบายฉันด้วยคำศัพท์ง่ายๆทำไมรหัสนี้ถึงเป็นข้อยกเว้น "วิธีการเปรียบเทียบละเมิดสัญญาทั่วไป!" และฉันจะแก้ไขได้อย่างไร private int compareParents(Foo s1, Foo s2) { if (s1.getParent() == s2) return -1; if (s2.getParent() == s1) return 1; return 0; }
187 java  comparator 

14
วิธีใช้ Comparator ใน Java เพื่อเรียงลำดับ
ฉันเรียนรู้วิธีใช้การเปรียบเทียบ แต่ฉันมีปัญหากับเครื่องมือเปรียบเทียบ ฉันมีข้อผิดพลาดในรหัสของฉัน: Exception in thread "main" java.lang.ClassCastException: New.People cannot be cast to java.lang.Comparable at java.util.Arrays.mergeSort(Unknown Source) at java.util.Arrays.sort(Unknown Source) at java.util.Collections.sort(Unknown Source) at New.TestPeople.main(TestPeople.java:18) นี่คือรหัสของฉัน: import java.util.Comparator; public class People implements Comparator { private int id; private String info; private double price; public People(int newid, String newinfo, double newprice) …
169 java  sorting  comparator 

11
เมื่อใดควรเป็นคลาสที่สามารถเปรียบเทียบได้และ / หรือเครื่องมือเปรียบเทียบ
ฉันได้เห็นการเรียนซึ่งใช้ทั้งเทียบเคียงและเปรียบเทียบ สิ่งนี้หมายความว่า? ทำไมฉันถึงต้องใช้อันเดียวกัน?

12
Android-java- วิธีจัดเรียงรายการของวัตถุตามค่าที่แน่นอนภายในวัตถุ
ฉันกำลังพยายามจัดเรียงรายการอาร์เรย์ของวัตถุตามค่าเฉพาะภายในวัตถุ อะไรคือแนวทางที่ดีที่สุดในการทำสิ่งนั้น ฉันควรใช้ Collections.sort () กับตัวเปรียบเทียบบางประเภทหรือไม่ ฉันพยายามจัดเรียงรายการของวัตถุตามค่าลอยที่พวกมันเก็บไว้ในตัวแปรตัวใดตัวหนึ่ง แก้ไข: นี่คือสิ่งที่ฉันมีจนถึงตอนนี้: public class CustomComparator implements Comparator<Marker> { @Override public int compare(Mark o1, Mark o2) { return o1.getDistance().compareTo(o2.getDistance()); } } สถานะข้อผิดพลาด: ไม่สามารถเรียกใช้ CompareTo (double) ในประเภทดั้งเดิม double เป็นเพราะตัวเปรียบเทียบไม่สามารถส่งคืนสิ่งอื่นนอกเหนือจากบางประเภทได้หรือไม่?

19
เมื่อใดควรใช้ตัวเปรียบเทียบและตัวเปรียบเทียบ
ฉันมีรายการวัตถุที่ต้องจัดเรียงบนสนามพูดว่า Score โดยไม่ต้องคิดมากฉันเขียนคลาสใหม่ที่ใช้ตัวเปรียบเทียบนั่นก็ทำงานและมันได้ผล เมื่อมองย้อนกลับไปที่สิ่งนี้ฉันสงสัยว่าฉันควรให้คลาสของฉันใช้งาน Comparable แทนการสร้างคลาสใหม่ที่ใช้ Comparator หรือไม่ คะแนนเป็นช่องเดียวที่จะเรียงลำดับวัตถุ สิ่งที่ฉันได้ทำนั้นเป็นที่ยอมรับในเชิงปฏิบัติหรือไม่? เป็นแนวทางที่ถูกต้อง "อันดับแรกให้คลาสใช้งานเทียบเคียงได้ (สำหรับการจัดลำดับตามธรรมชาติ) และหากจำเป็นต้องมีการเปรียบเทียบฟิลด์ทางเลือกให้สร้างคลาสใหม่ที่ใช้ตัวเปรียบเทียบ" ถ้า (2) ข้างต้นเป็นจริงหมายความว่าควรใช้ Comparator หลังจากที่พวกเขามีคลาสใช้งาน Comparable หรือไม่? (สมมติว่าฉันเป็นเจ้าของคลาสเดิม)

9
การเรียงลำดับ () ของ Javascript ทำงานอย่างไร
โค้ดต่อไปนี้จัดเรียงอาร์เรย์นี้อย่างไรให้อยู่ในลำดับตัวเลข? var array=[25, 8, 7, 41] array.sort(function(a,b){ return a - b }) ฉันรู้ว่าถ้าผลลัพธ์ของการคำนวณเป็น ... น้อยกว่า 0 : "a" ถูกจัดเรียงให้เป็นดัชนีที่ต่ำกว่า "b" ศูนย์: "a" และ "b" ถือว่าเท่ากันและไม่มีการเรียงลำดับ มากกว่า 0: "b" ถูกจัดเรียงให้เป็นดัชนีที่ต่ำกว่า "a" ฟังก์ชันการเรียกกลับการเรียงลำดับอาร์เรย์ถูกเรียกหลายครั้งในระหว่างการจัดเรียงหรือไม่ ถ้าเป็นเช่นนั้นฉันต้องการทราบว่าตัวเลขสองตัวใดถูกส่งผ่านเข้าสู่ฟังก์ชันในแต่ละครั้ง ฉันคิดว่าครั้งแรกใช้เวลา "25" (a) และ "8" (b) ตามด้วย "7" (a) และ "41" (b) ดังนั้น: 25 (a) - 8 (b) …

1
เหตุใดจึงไม่ลบ TreeSet ที่มีเครื่องมือเปรียบเทียบที่กำหนดเองเอารายการที่ใหญ่กว่าออก
ใช้ทั้ง Java 8 และ Java 11 ให้พิจารณาสิ่งต่อไปนี้TreeSetกับตัวString::compareToIgnoreCaseเปรียบเทียบ: final Set<String> languages = new TreeSet<>(String::compareToIgnoreCase); languages.add("java"); languages.add("c++"); languages.add("python"); System.out.println(languages); // [c++, java, python] เมื่อฉันพยายามที่จะลบองค์ประกอบที่แน่นอนที่มีอยู่ในTreeSetมันทำงาน: ทั้งหมดที่ระบุจะถูกลบออก: languages.removeAll(Arrays.asList("PYTHON", "C++")); System.out.println(languages); // [java] แต่ถ้าฉันพยายามที่จะเอาแทนมากขึ้นกว่าที่มีอยู่ในTreeSetโทรไม่เอาอะไรเลย (นี้ไม่โทรตามมา แต่เรียกแทนของตัวอย่างด้านบน): languages.removeAll(Arrays.asList("PYTHON", "C++", "LISP")); System.out.println(languages); // [c++, java, python] ผมทำอะไรผิดหรือเปล่า? ทำไมมันทำเช่นนี้? แก้ไข: String::compareToIgnoreCaseเป็นตัวเปรียบเทียบที่ถูกต้อง: (l, r) -> l.compareToIgnoreCase(r)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.