Sorting the Data

To sort the data, we first need to add a few more things to the ReportHandler class:

package com.mycompany.expense;

import java.util.Collections;
import java.util.Comparator;
...
public class ReportHandler {
    ...
    private static final Comparator ASC_TITLE_COMPARATOR = new Comparator( ) {
            public int compare(Object o1, Object o2) {
                String s1 = ((Report) o1).getTitle( );
                String s2 = ((Report) o2).getTitle( );
                return s1.compareTo(s2);
            }
        };

    private static final Comparator DESC_TITLE_COMPARATOR = new Comparator( ) {
            public int compare(Object o1, Object o2) {
                String s1 = ((Report) o1).getTitle( );
                String s2 = ((Report) o2).getTitle( );
                return s2.compareTo(s1);
            }
        };
    ...

A java.util.Comparator instance compares values, for instance, when sorting a collection. Its compare() method is called with the two objects to compare and returns a negative value if the first is less than the second, zero if they are equal, or a positive value if the first is greater than the second.

I create two static Comparator instances for each column: one for ascending order and one for descending order. I show you only the ones for the Title column here, but the others are identical (with the exception of which Report property they compare).

To sort the reports list, I add a sortReports() method:

 private void sortReports(List reports) { switch (sortBy) { case SORT_BY_TITLE: Collections.sort(reports, ascending ? ASC_TITLE_COMPARATOR : DESC_TITLE_COMPARATOR); break; case SORT_BY_OWNER: Collections.sort(reports, ...

Get JavaServer Faces now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.