ตั้งแต่Date
การดำเนินการComparable
มันมีcompareTo
วิธีการเช่นเดียวกับString
ไม่
ดังนั้นประเพณีของคุณComparator
อาจมีลักษณะเช่นนี้:
public class CustomComparator implements Comparator<MyObject> {
@Override
public int compare(MyObject o1, MyObject o2) {
return o1.getStartDate().compareTo(o2.getStartDate());
}
}
compare()
วิธีการจะต้องส่งกลับint
เพื่อให้คุณสามารถไม่ได้โดยตรงกลับมาเป็นboolean
เหมือนคุณกำลังวางแผนที่จะอยู่แล้ว
รหัสการเรียงลำดับของคุณจะเหมือนกับที่คุณเขียน:
Collections.sort(Database.arrayList, new CustomComparator());
วิธีที่สั้นกว่าเล็กน้อยในการเขียนทั้งหมดนี้หากคุณไม่จำเป็นต้องใช้ตัวเปรียบเทียบของคุณซ้ำคือการเขียนเป็นคลาสแบบไม่ระบุชื่อแบบอินไลน์:
Collections.sort(Database.arrayList, new Comparator<MyObject>() {
@Override
public int compare(MyObject o1, MyObject o2) {
return o1.getStartDate().compareTo(o2.getStartDate());
}
});
ตอนนี้คุณสามารถเขียนตัวอย่างสุดท้ายในรูปแบบที่สั้นลงโดยใช้การแสดงออกแลมบ์ดาสำหรับComparator
:
Collections.sort(Database.arrayList,
(o1, o2) -> o1.getStartDate().compareTo(o2.getStartDate()));
และList
มีsort(Comparator)
วิธีการดังนั้นคุณจึงสามารถย่อให้สั้นลงอีก:
Database.arrayList.sort((o1, o2) -> o1.getStartDate().compareTo(o2.getStartDate()));
นี่เป็นสำนวนสามัญที่มีวิธีการในตัวเพื่อสร้างComparator
คลาสที่มีComparable
คีย์:
Database.arrayList.sort(Comparator.comparing(MyObject::getStartDate));
ทั้งหมดนี้เป็นรูปแบบที่เทียบเท่ากัน