Verileri ArrayList'den nasıl filtreleyebilirim? Örneğin, , "Tarih İsimleri" adlı bir tane var. i aşağıda benim açıklama için koddan biraz yazdı:ArrayList'ten verileri filtrelemenin en hızlı yolu nedir?
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...
ve ben böyle veritabanına doldurmak:
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"));
ve sonra ben böyle ArrayList veri almak:
ArrayList<DateAndNames> list = new ArrayList<DateAndNames>();
list = hand.getData();
ve listeyi BaseAdapter'e aktarmadan önce, şu anda yaptığım şeyi filtrelemek istiyorum:
//filter by month and year:
public ArrayList<DateAndNames> filterTheList(int month , int year){
//the data from the database
list = hand.getData();
//temp list to store the filtered list
ArrayList<DateAndNames> filteredList = new ArrayList<DateAndNames>();
for (int i = 0; i < list.size(); i++) {
//check:
if(list.get(i).getMonth() == month && list.get(i).getYear() == year){
DateAndNames data = new DateAndNames(
list.get(i).getDay(),
list.get(i).getMonth(),
list.get(i).getYear(),
list.get(i).getName());
//The data filtered:
filteredList.add(data);
}
}
return filteredList;
}
şimdi, büyük sorun şudur: filtrelemek için 300 satır gibi döngü için çok çok büyük bir veriyi çalıştırdığımda, uygulama çok yavaş çalışıyor! asyncTask kullanmasa bile hala yavaş çalışıyor! i biraz yeniyim ama
Düzenlendi iyi tavsiye için istiyorum: ben de denedim ..
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;
}
Ama hala çalışmıyor ..
Satırları seçmek için kullandığınız veritabanı sorgusunu değiştirebilir misiniz? Eğer 'date_and_names'ten ay = month && year = year' seçimini yaparsanız, veriler java – user384842
içine getirilmeden önce filtrelenir. Yeni 'DateAndNames 'nesnelerini içermek için' filterList''e ihtiyacınız var mı yoksa filterList için uygun mu? '' listedeki aynı nesnelere referanslar içermek? Programının geri kalanının ne olduğunu bilmiyorum, bu yüzden buna cevap veremem. Ancak listeler referansları paylaşabilirse, veriden kurtulun ve sadece filterList.add (list.get (i)) 'deyin. Ancak, eğer 'list.size()' sadece 300 ise, fark etmenizin ne kadar zaman alacağını göremiyorum. – ajb
@ user384842 thank istiyorum örneğin lütfen. – Anna