Come posso filtrare i dati da ArrayList? ad esempio, ho una classe chiamata "Date Names". Ho scritto poco dal codice qui sotto per la mia spiegazione:Qual è il modo più veloce per filtrare i dati da ArrayList?
public class DateAndNames {
int day;
int month;
int year;
String name;
public DateAndNames(int day, int month, int year, String name) {
super();
this.day = day;
this.month = month;
this.year = year;
this.name = name;
}
public int getDay() {
return day;
}
...getters and setters...
e io popolo di base di dati del genere:
DbHandler hand = new DbHandler(this);
hand.add(new DateAndNames(20, 3, 2008, "Jhon"));
hand.add(new DateAndNames(10, 3, 2008, "Jhon"));
hand.add(new DateAndNames(10, 2, 2004, "Jhon"));
hand.add(new DateAndNames(22, 3, 2008, "Jhon"));
in tanto sono i dati di ArrayList del genere:
ArrayList<DateAndNames> list = new ArrayList<DateAndNames>();
list = hand.getData();
e prima di passare l'elenco al BaseAdapter, voglio filtrarlo, quindi quello che sto facendo adesso è:
ora, il grande problema è: quando ho un gran numero di dati da eseguire sul ciclo for come 300 righe da filtrare, l'applicazione funziona molto lentamente! anche se si utilizza asyncTask funziona ancora lentamente! io sono un po 'nuovo, ma vorrei per buoni consigli
Modificato: ho provato anche questo ..
public ArrayList<DateAndNames> getData(int month ,int year,String name){
open();
ArrayList<DateAndNames> list = new ArrayList<DateAndNames>();
Cursor c = myDb.query(TABLE_DAY, null, "name= ? and month = ? and year = ?", new String[] {name,month+"",year+""}, null, null, null);
while (c.moveToNext()) {
DateAndNames resultData = new DateAndNames(
c.getInt(0), //id
c.getString(1),//name
c.getInt(2), //month
c.getInt(3));//year
list.add(resultData);
}
close();
return list;
}
Ma ancora non funziona ..
È possibile modificare la query del database che si utilizza per selezionare le righe? Se dici 'seleziona da date_and_names dove mese = mese && anno = anno' allora i dati verranno filtrati prima di portarli in java – user384842
Hai bisogno di 'filteredList' per contenere nuovi oggetti' DateAndNames', o è OK per 'filteredList 'per contenere riferimenti agli stessi oggetti in' list'? Non so cosa faccia il resto del tuo programma, quindi non posso rispondere. Ma se le liste possono condividere riferimenti, eliminare 'data' e dire semplicemente' filteredList.add (list.get (i)) '. Tuttavia, se 'list.size()' è solo 300, non riesco a vedere come ci vorrebbe abbastanza tempo per farvi notare. – ajb
@ user384842 grazie vorrei per esempio per favore. – Anna