Yêu cầu sắp xếp dữ liệu là một yêu cầu thường được đặt ra cho các ứng dụng tiện ích. Công việc này trên các máy desktop thường được thực hiện thông qua các hệ quản trị cơ sở dữ liệu, trên môi trường J2ME chúng ta cũng có một công cụ khá hiệu quả để sắp xếp dữ liệu trên Record Store, đó là RecordComparator. RecordComparation là một java interface, khi có nhu cầu sắp xếp dữ liệu thì ứng dụng của ta phải cài đặt (implements) interface này.
Ví dụ:
public class Comparation implements RecordComparation { public int compare(byte[] rec1, byte[] rec2){
String str1 = new String (rec1); String str2 = new String (rec2); int result = str1.compareTo(str2); if( result == 0)
return RecordComparator.EQUIVALENT; else
if( result < 0)
else
return RecordComparator.FOLLOWS; }
}
Chúng ta cài đặt interface này bằng cách cung cấp hàm int compare(byte[], byte[]). Hàm này trả về 3 giá trị đặc biệt đã được định nghĩa trước là:
RecordComparator.EQUIVALENT.
RecordComparator.PRECEDES.
RecordComparator.FOLLOWS.
Khi đó, để bắt đầu quá trình sắp xếp và xử lý dữ liệu ta tạo ra một đối tượng Comparator (lớp có cài đặt RecordComparator) và một RecordEnumeration:
// Tạo đối tượng Comparation để sắp xếp. Comparator comp = new Comparator();
//Tạo đối tượng enum, tham số thứ 2 comparator.
RecordEnumeration re = rs.enumerateRecords(null, comp, false); // Duyệt danh sách thông qua enum.
While (re.hasNextElement()){
String str = new String(re.nextRecord()); // ………..
}
Lúc này hàm compare trong lớp Comparator sẽ được dùng làm cơ sở để sắp xếp các record. Hàm này nhận vào hai tham số là hai mảng byte (là 2 record dùng để so sánh).
int compare(byte[] r1, byte[] r2);
Tùy theo giá trị trả về của hàm mà record r1 sẽ được xếp trước record r2, nếu sau r2 hay 2 record này được xếp là bằng nhau.
Lúc này, khi ta dùng hàm enumerationRecord(…..) của lớp RecordStore, kết quả trả về sẽ là một tập hợp (enum) đã được sắp xếp thứ tự và ta có thể thao tác trên tập hợp này một cách bình thường.
Nguyên lý sort thực chất cũng khá đơn giản: đối với những record gồm nhiều trường (compound record), khi chúng ta có nhu cầu chỉ search trên một trường bất
kỳ thì trước nhất phải đọc trường đó của 2 record cần so sánh ra 2 biến trung gian. Sau đó việc so sánh 2 records trên thực chất là việc so sánh 2 biến trung gian. Tùy theo nhu cầu sort ta sẽ gán giá trị trả về cho hàm compare của lớp Comparator một các tương ứng.