0

データベースから取得した配列リスト内の文字列を比較し、それらを結合したいと考えています。データベースからデータを収集するコードは次のとおりです。

public List<String> getData2List() {
    String[] columns = new String[]{ KEY_ROWID, KEY_DATE, KEY_NAME, KEY_PRICE};
    Cursor c = ourDatabase.query(DATABASE_TABLE, columns, "1", null, null, null, null);

    List<String> results = new ArrayList<String>();
    int iCM = c.getColumnIndex(KEY_DATE);

    for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
        results.add(c.getString(iCM));
    }
    return results;
}

そして、ここにそれらをリストに配置するコードがあります..

Database info = new Database(this);
    info.open();        

    List<String> dates = info.getData2List();
    lv.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, dates));

    info.close();

これはすべて正常に機能しますが、同じエントリが複数ある場合は、同じもののリストになります (これが理にかなっている場合!?)。

例:同じ値のすべてのエントリが1つにコンパイルされる{"01/01/13", "02/01/13", "01/01/13", "03/02/13", "01/01/13"} ように、出力を作成しようとしているようにリストが出てきた場合。{"01/01/13", "02/01/13", "03/02/13"}

どんな助けやアイデアも大歓迎です。

4

4 に答える 4

0

なぜあなただ​​けを使用しないのですHashSet<String>か?

例:

List<String> dates = info.getData2List();
Set<String> uniqueDates = new HashSet<String>(dates);
于 2013-06-28T22:46:13.063 に答える
0

ArrayList の代わりにHashSetを使用できます。

あなたの場合、次の利点があるためです

  1. addAll メソッドを使用すると、2 つのセットの結合がより簡単になります
  2. 値が重複する可能性はありません
于 2013-06-28T22:46:33.887 に答える
0

Set コレクション クラスが必要です。基本的に「Set」が行うことは、一意の値のみを格納することです。コレクションに既に存在する新しい値を設定しようとすると、無視されます。equals と hashCode メソッドをオーバーライドしていることを確認してください。同様に、独自のオブジェクトを保存しようとしている場合は、ドキュメントを参照して、それがどのように機能するかについての詳細を確認してください。

http://docs.oracle.com/javase/6/docs/api/java/util/Set.html

よろしく!

于 2013-06-28T22:47:24.163 に答える