• 締切済み

JAVA LIST ソート

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

  • Java
  • 回答数1
  • ありがとう数7

みんなの回答

  • hoge_piyo
  • ベストアンサー率57% (15/26)
回答No.1

関連するQ&A

  • ソートについて

    以下のプログラムを実行すると整数のソート結果が "1","12","3"となってしまいます。 整数と文字列を分離させてそれぞれソートさせたいのですが 方法がわかりません。 import java.util.*; import java.io.*; class StrArray{ ArrayList list = new ArrayList(); //最下行に要素を追加 public void add(String data){ list.add(data); } //全ての要素を配列で所得 public String[] getAll(){ String[] all = new String[list.size()]; for(int i=0; i<list.size(); i++){ all[i] = super.get(i); } return all; } public static final int ASC_SORT = 0; public void sort(int mode){ ArrayList al = this.qsort(mode, list); al = list; } //クイックソート public ArrayList qsort(int mode, ArrayList data){ ArrayList result = new ArrayList(); if(data.size()<1){ return new ArrayList(); } String middle = (String)data.get(data.size()/2); ArrayList left = new ArrayList(); ArrayList right = new ArrayList(); for(int i=0; i<data.size(); i++){ if(i != data.size()/2){ if(mode == 0){ if(((String)data.get(i)).compareTo(middle)<=0){ left.add(data.get(i)); } else{ right.add(data.get(i)); } result.addAll(qsort(0, left)); result.add(middle); result.addAll(qsort(0, right)); return result; } return result; } } } } class Sample{ public static void main(String args[]){ StrArray alist = new StrArray(); alist.add("bbb"); alist.add("aaa"); alist.add("ddd"); alist.add("ccc"); alist.add("3"); alist.add("1"); alist.add("12"); alist.sort(0); String[] info = alist.getAll(); for(int i = 0; i < info.length; i++){ System.out.println(info[i]); } } }

  • コレクションクラスについて

    ●下記のコードについて質問があります import java.util.*; public class Test { public static void main(String args[]) { ArrayList<ObjectOne> list = new ArrayList<ObjectOne>(); list.add(new ObjectOne()); list.add(new ObjectOne()); list.add(new ObjectOne()); Collections.sort(list); } } class ObjectOne { private int x = 0; private int y = 0; } このソースをコンパイルすると、 シンボル: メソッド sort(java.util.ArrayList<ObjectOne>) 場所 : java.util.Collections の クラス Collections.sort(list); と、エラーが表示されてしまいます。 java.util.*をインポートしているので、上記のようなエラーはでないと 思うのですが、うまくいかないです。おそらく、ObjectOneクラスで 何か処理漏れが起きているのかもしれませんが、エラーとなる原因を 特定することができません。 エラーとなる原因と解消する手立てを教えていただければと思っております。 宜しくお願い致します。 「追記」 ArrayList<ObjectOne> list = new ArrayList<ObjectOne>(); の<ObjectOne>を消せばエラーはなくなりますが、 <ObjectOne>を消さない方針で考えがあればと思っております。

  • ArrayListなどのソート

     いつもお世話になっています。ArrayListなどをソートする際に、Comparatorインターフェースを実装したクラスを利用して、辞書順や数値順などでソートすることは出来ますよね。これを任意の単語の順番にソートするにはどのようにすればよいのでしょうか。つまり、下記例において、文字列順ではなくて、"ONE", "TWO", "THREE", "FOUR"の順番にソートしたいのです。 ArrayList list = new ArrayList(); list.add("THREE"); list.add("ONE"); list.add("FOR"); list.add("TWO");  やはりcompare()メソッド内で総当り的に比較するしかないのでしょうか。  開発環境はJDK1.4です。事情により返答が遅れてしまうかもしれませんが、どうぞ宜しくお願い致します。

    • ベストアンサー
    • Java
  • jspのListのListの表現方法について

    Listの中にListを入れる処理をJava側でしています。 そのListをリクエストに投げているのですが JSPでの表現方法がわかりません。 Java側では ArrayList[] a_list = new ArrayList[10]; a_list[j]= new ArrayList<Dto>(); a_list[j].add(list.get(i)); という感じで作っています。 logic:iterateをネストしても うまく取れません。 どなたか、分かりましたら、よろしくお願いします。

    • ベストアンサー
    • Java
  • ArrayList の変数をaddしてもアドレスが変化しない

    windowsXP Eclipse3.4で import java.util.ArrayList; ArrayList list = new ArrayList(); Bean bean = new Bean(); list.add(bean); list.add(bean); System.out.println(bean); System.out.println(list); とアドレスを出力してみると beanのアドレスとlist内の二つのアドレスと3つのアドレスが すべて同じになってしまいます。 なにが原因か分からないのですが、分かる方がいましたら教えてください。 よろしくお願いします。

    • ベストアンサー
    • Java
  • C#の配列リストを機械的に複数作りたいです。非常に初歩的な質問で恐縮な

    C#の配列リストを機械的に複数作りたいです。非常に初歩的な質問で恐縮なのですが、 C#で、配列リストを機械的に複数個作ることはできないでしょうか。 具体的には、myArrayListという配列リストを100個作るとして、 System.Collections.ArrayList myArrayList1 = new System.Collections.ArrayList(); System.Collections.ArrayList myArrayList2 = new System.Collections.ArrayList(); System.Collections.ArrayList myArrayList3 = new System.Collections.ArrayList(); System.Collections.ArrayList myArrayList4 = new System.Collections.ArrayList(); System.Collections.ArrayList myArrayList5 = new System.Collections.ArrayList(); ・・・ System.Collections.ArrayList myArrayList100 = new System.Collections.ArrayList(); をループなどを使うことによって書きたいのですが。 詳しい方がいらっしゃいましたら、アドバイス願います。 同じ内容の質問を先ほど投稿してしまったのですが、タイトルが不適切だったため 直させていただきました。すいませんでした。

  • Collections.binarySearchについて

    Collections.binarySearchを使うには、ソートする必要があることがわかりますが、ソートしない場合、結果はどうなるのはちょっと気になってしまっているので質問させてください。 例:public class char6_33 { public static void main(String args[]){ List list=new ArrayList(); list.add("b"); list.add("a"); list.add("c"); System.out.println(Collections.binarySearch(list,"a")); System.out.println(Collections.binarySearch(list,"b")); System.out.println(Collections.binarySearch(list,"c")); } 実行してみたら、結果は 1 -3 2 になるですが、なぜでしょうか。 もしSystem.out.println(Collections.binarySearch(list,"a"));の前にCollections.sort(list);を追加すれば、結果は0 1 2になるのは理解するできが、ソートしない場合はなぜ1 -3 2 になるのはちょっと理解できません。ご存知の方はぜひご教授ください。よろしくお願いします。

  • Javaの課題について質問です。パート(1)

    1ヶ月前に出されたjavaの課題でどうしてもわからなく投稿させて頂きました。正直自分の力で解決するべきだと思いますが初めてjavaに触れるので全く分からず投稿しました、どうかご教授下さい。  コンパイルしたのですが01,06,99以外の処理に全てエラーが出てしまいます。07,08に関しては最初の頭の数で昇順、降順されてしまいます。。 実行クラスはパート(2)に載せます。 import java.util.ArrayList; public class A21_StrArray { ArrayList<String> list = new ArrayList<String>(); public void add(String data){    //要素追加 list.add(data); } public void set(int index, String data){   //指定インデックスがない場合エラー list.set(index,data); } public String get(int index) throws IndexOutOfBoundsException{   //指定インデックスがない場合エラー String str; str = list.get(index);//指定文字列を取得 return str; } public void clear(){  //要素クリア list.clear(); } } import java.util.Collections; public class A22_StrArray extends A21_StrArray{ public String[] getAll(){ String[] all = new String[list.size()]; //全ての要素を配列で取得 for(int i=0; i<list.size(); i++){ all[i] = super.get(i); } return all; } public int getIndex(){      //要素数を取得 int item; item = list.size(); return item; } public static final int ASC_SORT = 0; //昇順ソート public static final int DESC_SORT = 1;   //降順ソート public void sort(int mode){           //引数 mode ASC_SORT, DESC_SORT if(ASC_SORT == mode){ Collections.sort(list); } else if(DESC_SORT == mode){ Collections.reverse(list); } } } 以下ファイルの引数は全てpath import java.io.BufferedReader; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class A23_StrArray extends A22_StrArray{ public void readFile(String path)throws Exception{ try{ FileReader in1 = new FileReader("path"); //テキストファイルの読み込み(上書きモード) int ch; while ((ch = in1.read()) != -1){ System.out.print(Integer.toHexString(ch) + " "); } in1.close(); }catch (IOException e) { System.out.println(e); } } public void readFile(String path , boolean modeAdd)throws Exception{ //テキストファイルの読み込み(追記/上書きモード) try { BufferedReader br1 = new BufferedReader(new FileReader(path)); String str1 ; if(modeAdd == true){ while ((str1 = br1.readLine()) != null) { list.add(str1); } br1.close(); } if ( modeAdd == false){ list.clear(); while ((str1 = br1.readLine()) != null){ list.add(str1); } br1.close(); } }catch (IOException e){ System.out.println(e); } } public void writeFile(String path)throws Exception{ //テキストファイルの書き込み(上書きモード) try{ FileWriter wr1 = new FileWriter("path"); String str2 = null ; wr1.write(str2); wr1.close(); }catch (IOException e) { System.out.println(e); } } public void writeFile(String path,boolean modeAdd)throws Exception{   //テキストファイルの書き込み(追記/上書きモード) try{ BufferedReader br2 = new BufferedReader(new FileReader(path)); String str3 ; if(modeAdd == true){ while ((str3 = br2.readLine()) != null) { list.add(str3); } br2.close(); } if(modeAdd == false){ list.clear(); while ((str3 = br2.readLine()) != null){ list.add(str3); } br2.close(); } }catch (IOException e) { System.out.println(e); }      } }

  • ArrayListのバージョン変換

    今、JAVAを勉強しているのですが、環境の問題でJAVA1.4しか使えません。 しかし、市販の本を購入し、プログラムを書いて練習していたら、JAVA5.0のプログラムでした。 下記のプログラムを1.4のバージョンに変更するにはどうしたらいいのでしょうか?? ---プログラム--- import java.util.ArrayList; public class ItemCollection { //商品一覧を保持するArrayList protected ArrayList<Item> list; //商品一覧に対するGETTER,SETTER public ArrayList getList(){ return this.list; } public void setList(ArrayList<Item> list){ this.list = list; } //引数のないコンストラクタ public ItemCollection(){ } //商品一覧に商品を追加 public void addItem(Item item){ list.add(item); } //商品一覧に商品を参照 public Item getItem(int index){ return list.get(index); } //商品一覧の数を返す public int getSize(){ return list.size(); } }

    • ベストアンサー
    • Java
  • ArrayListのソートについて

    プログラム上でListViewのカラムをクリックするとソートされる プログラムを作ろうと入れたのですが、リストはソートされるのに 中身(ArrayList)がソートされていないためソート後のアイテムを クリックしても違う値しか出てきません。 それにはArrayListのソートが必要と言う事が書いてあったので 実装をしてみたのですが、比較ができないようなエラーが出て うまくソートもできませんでした。 どうすればListViewのカラムソートと連動してArrayListのソートが 出来るようになるでしょうか? 開発環境はVS2005(C#) .NET2.0です。 サンプルクラスは以下の通りです。 public void UpdateListView() { ArrayList list = null; if (listView1.Columns[1].Text == "差出人") { // 受信メールの場合 list = collectionMail[RECEIVE]; } else if (listView1.Columns[1].Text == "差出人または宛先") { // 削除メールの場合 list = collectionMail[DELETE]; } listView1.BeginUpdate(); // リストビューの内容をクリアする listView1.Items.Clear(); // ListViewを設定する foreach (Mail mail in list) { ListViewItem item = new ListViewItem(mail.subject); item.SubItems.Add(mail.address); listView1.Items.Add(item); } listView1.EndUpdate(); } private void Form1_Load(object sender, EventArgs e) { // ListViewにアイテムを追加する for (int no = 0; no < subject.Length; no++) { Mail mail = new Mail(subject[no], address[no], body[no]); collectionMail[RECEIVE].Add(mail); } UpdateTreeView(); UpdateListView(); } public class Mail { public string subject; public string address; public string body; public Mail(string subject, string address, string body) { this.subject = subject; this.address = address; this.body = body; } }

専門家に質問してみよう