Comparatorの使用(リストの順を並べる)

リストの並び順をソートするために、Comparatorを使用する

複雑なリストでComparatorクラスの実装は下記の通り

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
//インタフェースComparatorを実装する
public class PageComparator implements Comparator<Page> {

    private int sortColumn = 0;
    private String sortStatus = Res.ASC;

    public void setSortColumn(int position) {
        this.sortColumn = position;
    }

    public void setSortStatus(String sortStatus) {
        this.sortStatus = sortStatus;
    }
//compareメソッドをオーバーライドしなければならない
    @Override
    public int compare(Page page1, Page page2) {
        int flag = 0;
        if (sortColumn == 0) {
            if (Res.ASC.equals(sortStatus) == true) {
                if (page1.getCreationTime() != null) {
//flagはpage1とpage2の比較結果とする。flag<0:page1はpage2より小ささ flag=0 page1=page2 flag>0:page1はpage2より大さ 
                    flag = page1.getCreationTime().compareTo(page2.getCreationTime());
                }
            } else {
                if (page2.getCreationTime() != null) {
                    flag = page2.getCreationTime().compareTo(page1.getCreationTime());
                }
            }
        }else if (sortColumn == 1) {
            if (Res.ASC.equals(sortStatus) == true) {
                if (page1.getTitle() != null) {
                    flag = page1.getTitle().compareTo(page2.getTitle());
                }
            } else {
                if (page2.getTitle() != null) {
                    flag = page2.getTitle().compareTo(page1.getTitle());
                }
            }
        }
        return flag;
    }
}

使用場合は下記の通り

1
2
3
4
5
    public void sortByStatus(String sort) {
        comparator.setSortStatus(sort);
//pagesはリストとする、comparator = new PageComparator();
        Collections.sort(pages, comparator);
    }