エンジニアのブログ

最近クラウドを触りはじめたエンジニアのブログ

Listから重複する要素を削除する方法

やりたかっこと

  • テーブルから(指定した列のみが)同じ値を持つ行を削除して、それをリストに格納する。
  • さらにそのリストを↑(で指定した列)とは別の列でソートする。



…わかりづらいですね、ハイ(´・ω・`)

つまり、次のようなテーブルがあったとき


col1| col2 | col3
1 xxx あいう
2 yyy かきく
3 xxx なにぬ ←削除したい行
4 zzz たちつ
col2で重複を判定&col1でソートを行い、次の結果を取得したい

col1 | col2 | col3
1 xxx あいう
2 yyy かきく
3 zzz たちつ

SQLのdistinctキーワードを使えばうまくいけるかなぁ…と思ったけど、だめだった。
distinctキーワードはSELECTで指定したすべての列の組み合わせが重複していないかチェックしてしまうようだ。なので、distinctを使った場合は、重複をチェックしない列の値を結果として返したり、ソートしたりすることができない。



結局、Javaでプログラムで重複する行を削除するようにした。

for(int i = 0; i < itemList.size(); i++){
 String search = itemList.get(i);
 for(int j = i++; j < itemList.size(); j++){
  if(search.equals(itemList.get(j).col2){
   itemList.delete(j);
  }
 }
} 

pmdの静的検査で引っかかるた (´・∀・`)ヘッ