こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

回答受付中の質問

Javaのソートに関する質問です。

Javaのソートに関する質問です。

CSVから取得したデータの一つをキーとして降順にソートしたいのでしょうが、どのような方法が効果的でしょうか?関数が利用できるのであれば関数を使用したいのですが。。。
データの詳細を以下に記載します。

環境
JavaSE5.0

CSVデータ
※ソート条件
・キー内容は「wwwwwwww-xxxxxxxx-yyyyyyyy-zzzzzzzz」という形式で、
「wwwwwwww」が1番、「xxxxxxxx」が2番、というように、左側の数値が優先されます。


(ソート前)キー内容 タイトル
11111111-22222222-33333333-4444444 テスト1
22222222-33333333-44444444-5555555 テスト2
11111111-00000000-22222222-3333333 テスト3
22222222-44444444-55555555-6666666 テスト4


(ソート後)キー内容 タイトル
11111111-00000000-22222222-3333333 テスト3
11111111-22222222-33333333-4444444 テスト1
22222222-33333333-44444444-5555555 テスト2
22222222-44444444-55555555-6666666 テスト4

投稿日時 - 2010-09-11 13:20:56

QNo.6174395

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

かっこよく実装するなら

class CSV {
List<Recode> recodes;
}
class Recode implements Comparable{
String key;
String value;
public int compareTo(Object o) {
if (!o instanceof Recode) {
// 例外処理
}
return key.compareTo( ((Recode)o).key);
}
}

をという具合に、CSVの1レコードにComparableを定義して
Collections.sort(recodes);
って具合かしら。

List<Recode>の代わりにSortedSetを使ったりすると
勝手にソートされたりするわよ。

ちなみにRecodeクラスにComparableを実装せず
Collections.sort(recodes, new Comparator(){~});
でソート条件を直接指定するのもありね。

投稿日時 - 2010-09-13 14:21:51

ANo.1

データの桁数がすべて同じなら、そのままソートすることでソート後の結果が出るんじゃないかと思います。

11111111-22222222-33333333-4444444
11111111-00000000-22222222-3333333

一文字ごとに先頭から比較すると思うので、2つ目のデータの先頭で判断されてソートされるはず。

あとCollectionsクラスにいちをソートしてくれるメソッドがあります。

投稿日時 - 2010-09-11 14:37:44