• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:教えてください)

データクラスの同じ値を持つリストを取得する方法は?

このQ&Aのポイント
  • データクラスのListから同じ値を持つデータを取得する方法を教えてください。
  • リストからa, b, cの値が同じデータを取得する方法について教えてください。
  • データクラスのListからa, b, cが同じ値を持つデータのリストを取得する方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • liar_adan
  • ベストアンサー率48% (730/1515)
回答No.4

普通なら方針だけを書くのですが、面倒なのでプログラムを書きます。 いろいろやり方はあると思いますが、私ならこうするという方法です。 ・まず、Listをソートします。 Listのままではやりにくいので、その前に配列化します。 ソートのためにComparatorのクラスを宣言します。 ・すると、同じものは隣り合っているので、それを調べます。そのためにさっきのComparatorを使います。 いくつもある場合、それを飛ばします。 ------------------ (DataComparator.java) class DataComparator implements java.util.Comparator{ public int compare(Object data1, Object data2){ Data d1 = (Data)data1; Data d2 = (Data)data2; int x; x = d1.a.compareTo(d2.a); if(x != 0)return x; x = d1.b.compareTo(d2.b); if(x != 0)return x; ....(略).... x = d1.y.compareTo(d2.y); if(x != 0)return x; x = d1.z.compareTo(d2.z); return x;/*zだけ違う*/ } } ------------- (メインの処理) Comparator cmp = new DataComparator(); Object[] dataArray = (もとのリスト).toArray(); Arrays.sort(dataArray, cmp); boolean flag = false; for(int i=0; i<dataArray.length-1;i++){ if(cmp.compare(dataArray[i], dataArray[i+1]) == 0){ if(flag == false){ <dataArray[i]をhashTableに格納する処理>; } }else{ flag = false; } } --------------------- コンパイルしてないから自信なしです。

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

その他の回答 (3)

  • liar_adan
  • ベストアンサー率48% (730/1515)
回答No.3

問題がいまひとつわかりません。 ・データクラスDataは、与えられているのでこのまま使う。 ・Dataのオブジェクトが多数ある。それがリスト(java.util.List?)に入っている。 ここまではわかります。次の >a,b,c,同じ値を持つ全データ というところがわかりません。 (1)String a~zの内容がすべて同じ(たとえば、a,b,...zがすべて"Hello"とか)Dataオブジェクトを選び出す。 (2)特定のDataオブジェクトxがあって、String a~zの内容すべてを比べて、xと一致するものを探す。 (3)Listの中に、(String a~zすべてを比べて)同じ要素があれば、それを抜き出す。 つまり「重複する要素」を見つける。 (たとえば、リストの2、3、6番目が同じもの…という風に見つけ出す) この3通りの解釈を考えました。 補足にある >各エレメント間を比較 というところを見ると、(3)の可能性が高いのかな…とも思いますが自信がありません。 3点補足ください。 (1)意味は上記の(3)でいいか? (2)その際、「重複する」ものが、いくつもの組になる可能性があるが、それはどうするのか? (3)Listとは、java.util.Listのことか。

yanmeng
質問者

補足

説明不十分で申し訳ありません。 意味は3の方です その際、「重複する」ものが、いくつもの組になる可能性があるが、それはどうするのか? については 取得したものを各自に保存し、最終的にhashTableに格納する予定です(比較対照となるプロパティがキーとなります) Listというのはjava.util.Listです

すると、全ての回答が全文表示されます。
  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.2

Listっていうのがよくわかってませんが java.awt.Listで良いのでしょうか。 2つのListを比較するなら if (lst1.getItemCount() != lst2.getItemCount()){ return false; } for (int i = 0 ; i < lst1.getItemCount() ; i++){ if (lst1.getItem(i).compareTo(lst2.getItem(i)) != 0){ return false; } } return true; こんな感じになるのかな。。。(自信無し)

すると、全ての回答が全文表示されます。
  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.1

a~zまでの変数を配列にしたほうが良いと思います。 コンストラクタで26個のStringを確保してからリスト化するとどうでしょう? a~zではなく a[0],a[1]・・・a[25]のように List lst = new List(1); for (int i = 0 ; i < 26 ; i++) lst.add(a[i]); ちなみにaからzを数値化する場合 例えばzを25に変換する場合 char ch; ch = 'z' int num = (int)ch - (int)'a'; で可能です。

yanmeng
質問者

補足

回答ありがとう御座います。 データクラスはすでにこういう形に定義してあるので、そのまま使わなければなりません。 処理としてあるデータリストの各エレメント間を比較(各エレメントが所有するいくつかのプロパティの値の比較) 同じ値を持つエレメントを取得したいわけです

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

関連するQ&A