• 締切済み

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

みんなの回答

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.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(){~}); でソート条件を直接指定するのもありね。

全文を見る
すると、全ての回答が全文表示されます。
  • amsun
  • ベストアンサー率0% (0/0)
回答No.1

データの桁数がすべて同じなら、そのままソートすることでソート後の結果が出るんじゃないかと思います。 11111111-22222222-33333333-4444444 11111111-00000000-22222222-3333333 一文字ごとに先頭から比較すると思うので、2つ目のデータの先頭で判断されてソートされるはず。 あとCollectionsクラスにいちをソートしてくれるメソッドがあります。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • JAVA LIST ソート

    JAVA LIST ソート JAVAの初心者です。よろしくお願いします。 検索結果の一覧画面のデータを SORT ボタンをクリック時、JAVA側で セッションBEANに保持してる 画面一覧のLISTデータをあるキーでソートしたいですが、 わからなくて困ってます。 自分なり考えたのは、 ArrayList list = new ArrayList(); List.add(getSessionBean());ーーーセッションBEANのデータをリストに追加 Collections.sort(list, new MyComparator() ここで MyComparator()での書き方がよくわかりません。 もし、ソートキーが 複数あれば どうなりますか? サンプルなどがあれば、ご教授頂ければ幸いです。

  • sortコマンドの使い方

    一列目はクラス、二列目はテストの点数、三列目は氏名からなるデータ: # data.txt ---------- 1 80 安倍 1 100 小泉 1 90 小沢 2 80 松坂 2 70 松井 2 100 鈴木 ------------- があります。 これを sortコマンドで (1) 1列目昇順 (2) 2列目降順 で並び替えて # data2.txt ---------- 1 100 小泉 1 90 小沢 1 80 安倍 2 100 鈴木 2 80 松坂 2 70 松井 ------------- のように、クラスごとに得点順に並び替えたいと思っています。 sort のオプションは -k が並び替えの基準の列の指定 -r が逆順 -g が数値データ なので cat data | sort -grk2 | sort -k1 としてみましたがうまく行きません。 一つめ「sort -r -k2」でせっかく二列目降順に並び替えているのに、二つめ(右)の sort -k1 でその結果が無くなってしまって 1 100 小泉 1 80 安倍 ← !! 1 90 小沢 ← !! 2 100 鈴木 2 70 松井 ← !! 2 80 松坂 ← !! のようになってしまいます。 どうすればよいでしょうか?

  • 二次元配列のソート PHP

    タイトルのとおりソートを行ってくれる関数を探しております。 $buf[][]の二次元配列の変数を日付の降順に並べ替えたいのですが、そういった関数は用意されていますか? sort()、rsort()では不可能かと思います。 以下、二次元配列の値です。配列三番目の日付の降順で再格納したいです。 ( [0] => Array ( [0] => 1[1] => name1 [2] => 2006-08-18 ) [1] => Array ( [0] => 2 [1] => name2[2] => 2006-08-28 ) [2] => Array ( [0] => 3[1] => name3 [2] => 2006-08-18 ) [3] => Array ( [0] => 4 [1] => name4[2] => 2006-08-18 ) よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • Excel2007 ソートがうまくいきません

    情報処理技能検定試験2級を受けるのですが、その中の問題でどうしてもソートができません。 コード 名前 原価 売上高  1    A  10   500  2    B  35   200  3    C  20   600 例えば、上記の表で「売上高を降順に並べ替えなさい」という問題があるのですが、売上高をソートすると他のデータは一緒に並び替えにならず、バラバラになってしまいます。他のシートには関数なども入っているのですが、どの様にすればソートが出来るのでしょうか? 教えてください。よろしくお願いします。

  • csvファイル内にてソートする方法

    ご協力お願いします。 あるログデータを取得したcsvファイルを作成しました。しかし、データ量も多く見やすいようにソートをかけたいのですが方法がわかりません。csvファイルの中身は以下のようになっています。 ___________________________ | 端末ID | ユーザーID | 日付 | 時間 | ――――――――――――――――――――――――― | ITD002 | 00000001 |2005/08/22| 11:00 | ――――――――――――――――――――――――― | ITD002 | 00000003 |2005/08/22| 21:00 | ――――――――――――――――――――――――― | ITD001 | 00000001 |2005/08/22| 12:00 | ――――――――――――――――――――――――― | ITD001 | 00000002 |2005/08/22| 18:20 | ――――――――――――――――――――――――― 以上のような中身になっています。レコード量は、もっと多いです。このランダムな順番に取得したレコードを 端末ID(昇順)ユーザーID(昇順)日付(降順)時間(降順)でソートする方法をご教授お願いします。

  • Javaプログラム内でソートすべきか悩んでいます。

    Javaプログラム内でソートすべきか悩んでいます。 開発環境は j2sdk1.4.2 eclipse3.2.0 Oracle10g(ドライバはThin接続) です。 処理の大まかな流れは以下の通りです。 1. 社員番号リスト(100,000件)を読み込む。(txtファイルで社員番号の順番はソートされていない) 2. 次の3で検索を行うために社員番号を1000件単位でリスト化する。 例:下記のような文字列を作成し、ArrayListに入れる   ('000077','0100002','0000503',~,'0080400') 以下の処理は2で作成したArrayListの件数繰り返す 3. データベース検索を行う。 社員番号を検索キーに検索を行う。(2で作成した文字列を 社員番号 in 「文字列」のような形で) 4. 検索結果(1レコードにつき20項目)をファイルへ出力する。(CSVファイルへ結果を追記していく) 4で結果を出力するのですが、ソート条件が決められています。 条件は「住所コードの昇順」、「社員番号の昇順」です。 住所コードはDB内のデータにあります。 3の検索結果をメモリに蓄積して全件取得を終えたらソートしようと思いましたが、 OutOfMemoryエラーが発生してしまいました。 ひとつ案を考え、2の処理を終えたあとにDBから住所コードと社員番号を取得して TreeMapに全件を蓄積(キーは「住所コード + 社員番号」、データは社員番号)し、 (このデータでOutOfMemoryエラーは発生しませんでした) 自動的にソートされた社員番号で再度2~4の処理を行うのですが すごく処理時間が増えてしまい効率が悪い気がします…。 処理時間の短縮、メモリ使用の抑制を考慮した良い案はないでしょうか?

    • ベストアンサー
    • Java
  • STLのlistのソートについて教えてください。

    STLで何か作ってみようと思っているのですが、複数のメンバを持つ構造体オブジェクトのリスト(要素の値が構造体オブジェクトであるリスト)を、その構造体オブジェクトのメンバの中の1つのをキーとして昇順、又は降順にソートしようとした場合、どのようにすればよいのでしょうか?? http://www5c.biglobe.ne.jp/~ecb/cpp/07_08.html ここを見ると、sort() という関数があるようですが、単に昇順でソートする、としか書いていなく、構造体のリストのソートはどうするのだろうと疑問です。 詳しい方いらっしゃいましたらご教授頂けると幸いです。

  • ポリゴン・奥行きソート法について

    CGの原理みたいなものを勉強をしています。 HPをいろいろ探したのですが、わかりやすいページがみあたらなくて、 ここに載せました。 「レンダリング」の隠面消去のところで「奥行きソート法」でつまづきました。 奥行き値を求めて降順、または昇順に並べて、多面体の前後関係を決めるのはわかるのですが・・・。ソートのアルゴリズムもわかるのですが。 本には「データ列をデータのキー項目について並べること」 「データはポリゴンとその奥行き値、キー項目は奥行き値」 とかかれているのですがよくわかりません。 たぶん「ポリゴン」がよくわからないのでイメージがわかないのです。 「ポリゴン」のなにから「奥行き値」が求められるのですか? 「ポリゴン」とはなんですか? 解説またはわかりやすいHPを教えてください。

  • 配列のソート

    下記のような形でデータを取得し結果を配列に格納し、 降順にソートしたいのですが、いい方法が見つかりません。いい方法はあるでしょうか。よろしくお願いします。 テーブル構造(test) ID|name |point|area| ==================== 1 |Aさん|56 | A | 2 |Bさん|12 | B | 3 |Cさん|24 | B | 4 |Dさん|34 | B | $sql = "select * from test"; $result = mysql_query($strSQL); while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { ここで配列に格納 } 配列への格納方法と、pointの降順にソートする 方法が知りたいです。 最終的に、Aさん、Dさん、Cさん、Bさんと なるようにしたいです。

    • ベストアンサー
    • PHP
  • 配列のソートについて質問です。

    配列のソートについて質問です。 2つのキーで配列の中身をソートしたいのですが、スマートな書き方があれば教えてください。 そもそも間違っている、などのご指摘でもありがたいです。 @t1 = map {(split /,/)[1]} @data; @t2 = map {(split /,/)[2]} @data; @data = @data[sort {$t1[$a] <=> $t1[$b] or $t2[$a] <=> $t2[$b]} 0 .. $#t1]; @dataの内容 A,1,2 B,1,3 C,2,1 D,3,2 E,3,1 F,1,1 出力結果 F,1,1 A,1,2 B,1,3 C,2,1 E,3,1 D,3,2 よろしくお願いします。

    • ベストアンサー
    • Perl