0

私はMySQLテーブルを持っています

id_user id_info
1 45
1 54
1 12
2 16
2 48
3 94
... ...

すべてのユーザーに対して、ランダムに(たとえば、1)、または基準を使用してn個の情報を選択したいと思います。テーブルが大きい場合、純粋なMySQLでは非常に集中的であることを私は知っています(私はこのソリューションを試しましたhttp://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row- per-group-in-sql /

Javaでは、テーブル全体をクエリし、データをに入れますList<ModelData>。ここで、ModelDataはゲッターとセッターのみを使用した単純なモデルです。このリストを削除するための最良の方法は何でしょうか。

id_user id_info
1 54
2 16
3 94
... ...
4

3 に答える 3

0

List次のように作成しながら操作を行うことをお勧めします

  • aLinkedHashMapを使用し、user_idをキーとして使用し、info_idを値として使用します。
  • 行を反復処理するときに、LinkedHashMapにそのキーが含まれているかどうかを確認します。falseの場合は、info_idを値として挿入します。そのキーがすでに存在する場合は、新しいキーで値をランダムに変更します(0.5の可能性がある乱数決定を使用します)。

最後に、あなたはうまくいけばあなたが尋ねたもので終わるでしょう。

于 2012-06-07T11:28:13.827 に答える
0

リストの代わりに、ユーザーIDをキーとしてハッシュマップに配置します。

于 2012-06-07T11:20:49.230 に答える
0

ソートされたレコードが必要な場合は、TreeMapを使用することをお勧めします。

Map<Integer,id_info_type> records =new TreeMap<Integer, id_info_type>()

キー:整数

値:id_info_type文字列の場合は文字列に移動します。

私はそれがあなたを助けるかもしれないと思います。

マップによって処理される重複を気にする必要はありません。

于 2012-06-07T11:42:12.740 に答える