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); } |