- PR -

Listの中のJavaBeansをソート

1
投稿者投稿内容
ゆう
常連さん
会議室デビュー日: 2001/12/10
投稿数: 33
投稿日時: 2004-01-29 23:57
こんにちわ。ソートのアルゴリズム?に関してご教授ください。

現在、Servlet(2.3)とJSP(1.2)でTomcat(4.1.27)とStruts(1.1)を使用して
図書検索システムのようなものを製作しています。

一覧表示の部分を作成しているのですが、
JavaBeans(下記list1)に表の1行分のデータを格納し、
それをArrayList(下記list2)に入れて表を作成しています。

以下の例では最初の表示時は図書コードの昇順に表示されますが、
表示後のユーザのアクション(ソートボタン押下)によって
タイトルの降順に並べ替えたいと思います。
この場合に、初期表示時に取得したデータから過不足なくソートするのに
良い方法は無いでしょうか。
"リストの中のJavaBeansをJavaBeansの属性でソート"です。

それとも、そもそもこのようなシステムを作る際にソートを考慮するならば
JavaBeansとリストではなくて他の方法を使用するのが良いのでしょうか?

/**
* 表の1行分を格納するデータビーン
* (list1)
**/
public class BookBean {
// 図書コード
private String bookId = "";
// タイトル
private String title = "";

/**
* String
*/
public String getBookId() {
return bookId;
}

/**
* String
*/
public String getTitle() {
return title;
}

/**
* void
*/
public void setBookId(String string) {
bookId = string;
}
/**
* void
*/
public void setTitle(String string) {
title = string;
}
}


/**
* 表のデータを格納するコレクション
* (list2)
**/
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
ArrayList list = new ArrayList();
for (int i = 1; i <= 10; i++) {
BookBean bean = new BookBean();
bean.setBookId(i + 1000 +"");
bean.setTitle(i + "テスト");
list.add(bean);
}
koe
大ベテラン
会議室デビュー日: 2003/07/13
投稿数: 198
投稿日時: 2004-01-30 00:21
java.util.Collections#sort(List, Comparator)を使えば可能です。
コード:
Collections.sort(list, new Comparator(){
    public int compare(Object o1, Object o2){
        // o1とo2の順番が逆なのは、「降順」という指定があったため
        return ((BookBean)o2).getTitle().compareTo(((BookBean)o1).getTitle());
    }
});


Javaでするならこんな形で。DB由来のデータならSQLでソートした方がいいと思いますが。
1

スキルアップ/キャリアアップ(JOB@IT)