Sắp xếp theo một hoặc nhiều thuộc tính trong ArrayList

Trong lập trình đôi lúc chúng ta có một ArrayList object gồm nhiều thuộc tính khác nhau và chúng ta cần sắp xếp theo một hoặc nhiều thuộc tính chứa trong object. Vậy phải làm thế nào đây? Chúng ta sẽ cùng thảo luận trong bài này nha.

Ví dụ: Cho class Staff có chứa các thuộc tính sau: Tên- String, ngày sinh – LocalDate, Lương – double, level – int, Quê quán – String. 

Chúng ta có class Staff được sử dụng cho các ví dụ sau:

Cho một ArrayList chứa các Staff được khởi tạo sẵn

Note:

  • Với các ví dụ sau, code sẽ được thay thế bởi comment add more code ở hàm main
  • Chúng ta sẽ sử dụng method sort() của ArrayListCollections để tiến hành các ví dụ trong bài này.

Sắp xếp ArrayList theo một thuộc tính

Ví dụ: Sắp xếp Staff theo mức lương

Sắp xếp tăng dần

Or comparator

Output: 

Staff{name=’a’, dateOfBirth=1996-01-01, salary=14.5, level=1, homeTown=’DN’}
Staff{name=’w’, dateOfBirth=1997-08-06, salary=30.5, level=2, homeTown=’KH’}
Staff{name=’a’, dateOfBirth=2012-02-01, salary=50.0, level=2, homeTown=’BH’}
Staff{name=’h’, dateOfBirth=1992-03-04, salary=70.4, level=3, homeTown=’BD’}
Staff{name=’h’, dateOfBirth=1995-01-05, salary=70.4, level=3, homeTown=’KG’}
Staff{name=’g’, dateOfBirth=1994-03-01, salary=100.6, level=4, homeTown=’SG’}
Staff{name=’p’, dateOfBirth=2001-10-20, salary=650.56, level=7, homeTown=’BT’}
Staff{name=’w’, dateOfBirth=2000-02-19, salary=800.0, level=8, homeTown=’CM’}

Sắp xếp giảm dần

Or comparator

Output:

Staff{name=’w’, dateOfBirth=2000-02-19, salary=800.0, level=8, homeTown=’CM’}
Staff{name=’p’, dateOfBirth=2001-10-20, salary=650.56, level=7, homeTown=’BT’}
Staff{name=’g’, dateOfBirth=1994-03-01, salary=100.6, level=4, homeTown=’SG’}
Staff{name=’h’, dateOfBirth=1992-03-04, salary=70.4, level=3, homeTown=’BD’}
Staff{name=’h’, dateOfBirth=1995-01-05, salary=70.4, level=3, homeTown=’KG’}
Staff{name=’a’, dateOfBirth=2012-02-01, salary=50.0, level=2, homeTown=’BH’}
Staff{name=’w’, dateOfBirth=1997-08-06, salary=30.5, level=2, homeTown=’KH’}
Staff{name=’a’, dateOfBirth=1996-01-01, salary=14.5, level=1, homeTown=’DN’}

Sắp xếp ArrayList theo nhiều thuộc tính

Ví dụ: Sắp xếp các Staff  theo name và level, mức độ ưu tiên sắp xếp name -> level. 

Sắp xếp tăng dần

Output:

Staff{name=’a’, dateOfBirth=1996-01-01, salary=14.5, level=1, homeTown=’DN’}
Staff{name=’a’, dateOfBirth=2012-02-01, salary=50.0, level=2, homeTown=’BH’}
Staff{name=’g’, dateOfBirth=1994-03-01, salary=100.6, level=4, homeTown=’SG’}
Staff{name=’h’, dateOfBirth=1992-03-04, salary=70.4, level=3, homeTown=’BD’}
Staff{name=’h’, dateOfBirth=1995-01-05, salary=70.4, level=3, homeTown=’KG’}
Staff{name=’p’, dateOfBirth=2001-10-20, salary=650.56, level=7, homeTown=’BT’}
Staff{name=’w’, dateOfBirth=1997-08-06, salary=30.5, level=2, homeTown=’KH’}
Staff{name=’w’, dateOfBirth=2000-02-19, salary=800.0, level=8, homeTown=’CM’}

Sắp xếp giảm dần 

Output:

Staff{name=’w’, dateOfBirth=2000-02-19, salary=800.0, level=8, homeTown=’CM’}
Staff{name=’w’, dateOfBirth=1997-08-06, salary=30.5, level=2, homeTown=’KH’}
Staff{name=’p’, dateOfBirth=2001-10-20, salary=650.56, level=7, homeTown=’BT’}
Staff{name=’h’, dateOfBirth=1992-03-04, salary=70.4, level=3, homeTown=’BD’}
Staff{name=’h’, dateOfBirth=1995-01-05, salary=70.4, level=3, homeTown=’KG’}
Staff{name=’g’, dateOfBirth=1994-03-01, salary=100.6, level=4, homeTown=’SG’}
Staff{name=’a’, dateOfBirth=2012-02-01, salary=50.0, level=2, homeTown=’BH’}
Staff{name=’a’, dateOfBirth=1996-01-01, salary=14.5, level=1, homeTown=’DN’}

Sắp xếp ArrayList theo nhiều cấp

Các thuộc tính trong object có thể là một object khác. Chúng ta sẽ tìm hiểu xem sắp xếp ArrayList nhiều cấp qua ví dụ sau

Ví dụ: Sắp xếp tăng dần các Staff theo năm sinh.

Trong đây, ngày sinh của Staff là một LocalDate gồm ngày, tháng năm. chúng ta chỉ sắp xếp theo năm, bỏ qua ngày và tháng.

Output:

Staff{name=’h’, dateOfBirth=1992-03-04, salary=70.4, level=3, homeTown=’BD’}
Staff{name=’g’, dateOfBirth=1994-03-01, salary=100.6, level=4, homeTown=’SG’}
Staff{name=’h’, dateOfBirth=1995-01-05, salary=70.4, level=3, homeTown=’KG’}
Staff{name=’a’, dateOfBirth=1996-01-01, salary=14.5, level=1, homeTown=’DN’}
Staff{name=’w’, dateOfBirth=1997-08-06, salary=30.5, level=2, homeTown=’KH’}
Staff{name=’w’, dateOfBirth=2000-02-19, salary=800.0, level=8, homeTown=’CM’}
Staff{name=’p’, dateOfBirth=2001-10-20, salary=650.56, level=7, homeTown=’BT’}
Staff{name=’a’, dateOfBirth=2012-02-01, salary=50.0, level=2, homeTown=’BH’}

Please follow and like us:
error

Leave a Reply

Your email address will not be published. Required fields are marked *