←フエルチラシノウラ。トップページへもどる。

【Java】Comparatorを実装してBeanのリストを自由にソートする方法。

Java ソート リスト ビーン bean List Comparator コンペア sort

はじめに。


用意するクラスは以下の三つです。

1. HogeBean.java (POJOなオブジェクト。いわゆるBeanです。)
2. HogeComparator.java (HogeBeanのリストをソートするためのComparatorです。自分で実装します。)
3. SortTest.java (テストクラスです。)

ソース


HogeBean.java
package hoge.sort;

/**
* <p>
* HogeBean
* </p>
* 何の変哲も無いただのPOJOです。
*
* @author brother.whites
*
*/
public class HogeBean {
private String aaa;
private String bbb;

public String getAaa() {
return aaa;
}

public void setAaa(String aaa) {
this.aaa = aaa;
}

public String getBbb() {
return bbb;
}

public void setBbb(String bbb) {
this.bbb = bbb;
}

@Override
public String toString() {
StringBuffer sb = new StringBuffer();
sb.append("aaa=" + aaa + ", ");
sb.append("bbb=" + bbb + ", ");
return sb.toString();
}

}


HogeComparator.java
package hoge.sort;

/**
* HogeBeanのリストをソートするComparator。
* </p>
* java.util.Comparatorインターフェースを実装しています。
*
* @author brother.whites
*
*/
public class HogeComparator implements java.util.Comparator {
/*
* (non-Javadoc)
*
* @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
*/
public int compare(Object o1, Object o2) {
HogeBean b1 = (HogeBean) o1;
HogeBean b2 = (HogeBean) o2;
return b1.getAaa().compareTo(b2.getAaa());
}
}


SortTest.java
package hoge.sort;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
* HogeComparatorを使ってHogeBeanリストをソートするテスト。
* @author brother.whites
*
*/
public class SortTest {

/**
* メイン
* @param args
*/
public static void main(String[] args) {
new SortTest();
}

/**
* コンストラクタ
*/
public SortTest() {
// テスト用のHogeBeanリストを作ります。
List<HogeBean> list = createDummyBeanList();

// ソート前
System.out.println("ソート前");
log(list);

// ソート
doSort(list, new HogeComparator());

// ソート後
System.out.println("ソート後");
log(list);
}

/**
* テスト用のHogeBeanリストを作成
* @return list
*/
private List<HogeBean> createDummyBeanList() {
List<HogeBean> list = new ArrayList<HogeBean>();

HogeBean bean1 = new HogeBean();
bean1.setAaa("123");
bean1.setBbb("BNBBBBBBB");
list.add(bean1);

HogeBean bean2 = new HogeBean();
bean2.setAaa("999");
bean2.setBbb("CCCCCCCCC");
list.add(bean2);

HogeBean bean3 = new HogeBean();
bean3.setAaa("345");
bean3.setBbb("DDDDDDDDDDD");
list.add(bean3);

HogeBean bean4 = new HogeBean();
bean4.setAaa("11");
bean4.setBbb("EEEEEEEEEEEEE");
list.add(bean4);

HogeBean bean5 = new HogeBean();
bean5.setAaa("11111");
bean5.setBbb("EEEEEEEEEEEEE");
list.add(bean5);

return list;
}

/**
* HogeBeanリストをHogeComparatorを使ってソートします。
* @param list
* @param comparator
*/
private void doSort(List<HogeBean> list, Comparator comparator) {
Collections.sort(list, comparator);
}

/**
* listの中身をダンプ出力します。
* @param list
*/
private void log(List<HogeBean> list) {
for (int i = 0; i < list.size(); i++) {
HogeBean bean = list.get(i);
System.out.println("" + i + ": " + bean);
}
}
}


実行してみる。


ソート前
0: aaa=123, bbb=BNBBBBBBB,
1: aaa=999, bbb=CCCCCCCCC,
2: aaa=345, bbb=DDDDDDDDDDD,
3: aaa=11, bbb=EEEEEEEEEEEEE,
4: aaa=11111, bbb=EEEEEEEEEEEEE,
ソート後
0: aaa=11, bbb=EEEEEEEEEEEEE,
1: aaa=11111, bbb=EEEEEEEEEEEEE,
2: aaa=123, bbb=BNBBBBBBB,
3: aaa=345, bbb=DDDDDDDDDDD,
4: aaa=999, bbb=CCCCCCCCC,


上記のように出れば成功です。
HogeBeanのメンバ変数aaaが文字列としてソートされています。

http://goodjob.boy.jp/chirashinoura/id/154.html

作成日: 2007-09-20 17:37:24

最終更新日: 2007-09-20 17:37:24

▲このページの上へ