- PR -

複数キーのソートについて

1
投稿者投稿内容
なぎ
会議室デビュー日: 2004/11/17
投稿数: 12
投稿日時: 2004-11-17 21:15
はじめまして。
JAVAを初めて1ヶ月の超初心者です。

WebSphere5.1、Windows2000を利用してJAVAを作成しています。
配列にデータを取得してきてそのデータを複数のキーでソートするプログラムが思いつかずに
色々と検索をしてみたのですが見つからなく質問させていただきました。

ArrayList result;
Public class resultRow{
String kumi;
String namae;
int bangou;
}
resultRow rRow = new ArrayList(resultRow);
として作った配列にデータをDBから値を取得してきています。

つくられた配列に入っているデータのソートを
kumi

namae

bangou
の優先度でソートを行いたいのです。

まだプログラム初心者の私には過ぎた要望なのですが、
会社で開発をしなくてはいけなく、回りに聞く人もいずに八方ふさがりになっています。
お手数おかけしますが何卒よろしくお願いします。
間違っている部分があったら申し訳ありません。
配列作成はうまくいっています。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-11-17 21:29
何がわからないのでしょうか?
単一のキーでのソートはできますか?
できるのであればソートをかけたい項目順にソートするだけです。
なぎ
会議室デビュー日: 2004/11/17
投稿数: 12
投稿日時: 2004-11-17 21:59
インギ様

返答ありがとうございます。
基本的なもので申し訳ないのですがどのようなプログラムを書けばいいのかが分からなくて困っています。
int bangou;の単一のソートはできます。
複数ソートの前にStringのソートすら迷っている状態です。
文字コードの大小を調べて、自力で配列の入れ替えをするしかないでしょうか。
Stringもsortでソートできますでしょうか。
単一のソートは以下のように行っています。

Collections.sort(result,
new Comparator() {
public int compare(Object o1, Object o2) {
resultRow first = (resultRow)o1;
resultRow second = (resultRow)o2;
return (first.bangou-second.bangou);
}
}
);

もしよろしかったら、何か例文を教えて頂けないでしょうか。
図々しいお願い申し訳ありません。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2004-11-17 22:34
勉強の為というならわかりますが、
なぜDBから取得したものをわざわざソートするのですか?
べつにSQLでソートするだけだと思いますが。

なぎ
会議室デビュー日: 2004/11/17
投稿数: 12
投稿日時: 2004-11-17 22:51
かつのり様

SQLを5つほど発行して
寄せ集めたデータを最終的にソートして表示したいのです。
最終的に1つの配列にデータを入れてそれをソートしようと考えています。
説明が不十分で申し訳ありません。
シュン
ぬし
会議室デビュー日: 2004/01/06
投稿数: 328
お住まい・勤務地: 東京都
投稿日時: 2004-11-17 23:07
そこまで出来ているならもう少しです。

Stringは、文字コードによる自然順序付け比較をしてくれるメソッドを
もってますよ。String#compareTo(String)とか。あとはそのComparat
orに、これによる比較を盛り込むだけです。

kumiで比較->戻り値が0だったらnamaeで比較->戻り値が0だったらbangouで比較

ですね。


問題その1
Unicodeの文字コード比較でよいのですか?漢字だった場合、ソート結果は意味
がなくないですか?
->解決法:Stringの順序付けの代わりに、java.text.Collatorによる順序付け
を使用すると、ある程度解決できるかも。

問題その2
JavaプログラムとDBとの問い合わせを5回繰り返すオーバーヘッドがもったいな
いので、DBがORDER BY句でやってくれるソート順でよいのなら、SQLを結合する
ことを考えた方が良いかと。
なぎ
会議室デビュー日: 2004/11/17
投稿数: 12
投稿日時: 2004-11-17 23:26
シュン様

返答ありがとうございます。
それで明日早速やってみます。
入力されるデータは必ず英数字なので、Unicodeの比較で問題ないです。
SQLは他部署で考えられたもので、すでに認証会議を通っているものを使用するので
変更する事ができません・・・現状で頑張ってみます。
またこれで躓いた場合はよろしくお願いします。
1

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