Skip to content

Instantly share code, notes, and snippets.

@oshiro-kazuma
Created June 22, 2012 11:25
Show Gist options
  • Save oshiro-kazuma/2972183 to your computer and use it in GitHub Desktop.
Save oshiro-kazuma/2972183 to your computer and use it in GitHub Desktop.
Commons Collectionsを使った複合ソート
// HogeBean.java
public class HogeBean {
private int age;
private String name;
private String hometown;
public HogeBean(int age, String hometown, String name) {
this.setAge(age);
this.hometown = hometown;
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
}
public String getHometown() {
return hometown;
}
public void setHometown(String hometown) {
this.hometown = hometown;
}
}
// SortTest.java
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.apache.commons.beanutils.BeanComparator;
import org.apache.commons.collections.comparators.ComparatorChain;
/** ComparatorChainを使ってみる */
public class SortTest {
/** メイン */
public static void main(String[] args) {
List<HogeBean> beans = createTestData();
SortUtil.sort(beans);
// 結果出力
for (HogeBean b : beans) {
System.out.print(b.getHometown() + " ");
System.out.print(b.getAge() + " ");
System.out.print(b.getName() + " ");
System.out.println();
}
}
/** ソート・ユーティリティークラス */
static class SortUtil {
/**
* 引数のリストをソートする。
* hogetown,age,nameの順にソート。
*
* @param beans HogeBeanのリスト
*/
public static void sort(List<HogeBean> beans) {
ComparatorChain comparator = new ComparatorChain();
// ソート対象のBeanのメンバ
comparator.addComparator(new BeanComparator("hometown"));
comparator.addComparator(new BeanComparator("age"));
comparator.addComparator(new BeanComparator("name"));
Collections.sort(beans, comparator);
}
}
/** テストデータ作成 */
public static List<HogeBean> createTestData() {
List<HogeBean> beans = new ArrayList<HogeBean>();
beans.add(new HogeBean(18, "沖縄", "ほげ太郎"));
beans.add(new HogeBean(16, "大阪", "ふー太郎"));
beans.add(new HogeBean(16, "大阪", "ぷー太郎"));
beans.add(new HogeBean(22, "沖縄", "すずきさん"));
beans.add(new HogeBean(23, "千葉", "ひがさん"));
beans.add(new HogeBean(23, "千葉", "ひがしさん"));
beans.add(new HogeBean(23, "千葉", "ひがしおんなさん"));
beans.add(new HogeBean(23, "千葉", "おおうらさん"));
beans.add(new HogeBean(27, "千葉", "すずきさん"));
beans.add(new HogeBean(43, "沖縄", "こちんださん"));
beans.add(new HogeBean(55, "東京", "ひがしおんなさん"));
beans.add(new HogeBean(15, "沖縄", "がじゃさん"));
beans.add(new HogeBean(19, "沖縄", "こちんださん"));
return beans;
}
}
@oshiro-kazuma
Copy link
Author

Commons Collections を使ったソートのテスト

出力結果

千葉 23 おおうらさん
千葉 23 ひがさん
千葉 23 ひがしおんなさん
千葉 23 ひがしさん
千葉 27 すずきさん
大阪 16 ふー太郎
大阪 16 ぷー太郎
東京 55 ひがしおんなさん
沖縄 15 がじゃさん
沖縄 18 ほげ太郎
沖縄 19 こちんださん
沖縄 22 すずきさん
沖縄 43 こちんださん

必要なライブラリ

commons-beanutils-1.8.3.jar
commons-collections-3.2.1.jar
commons-logging-1.1.1.jar

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment