Was ist der schnellste Weg, um Daten von ArrayList zu filtern?Java

Java-Forum
Guest
 Was ist der schnellste Weg, um Daten von ArrayList zu filtern?

Post by Guest »

Wie kann ich Daten aus ArrayList filtern?
Ich habe zum Beispiel eine Klasse namens "Datumsnamen".
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...
< /code>

und Ich füllen so eine Datenbank wie diese: < /p>

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"));
< /code>

und dann lasse ich die Daten so an eine ArrayList -solche abgerufen: < /p>

ArrayList list = new ArrayList();
list = hand.getData();
< /code>

Und bevor ich die Liste an den Basisadapter übergeben habe, möchte ich sie so filtern, so dass ich es gerade mache, ist das: < /p>

//filter by month and year:
public ArrayList filterTheList(int month , int year){
//the data from the database
list = hand.getData();
//temp list to store the filtered list
ArrayList filteredList = new ArrayList();

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;
}
< /code>

Jetzt ist das große Problem: Wenn ich eine sehr sehr, sehr große Daten auf der für die für Schleifen wie 300 Zeilen zum Filtern ausgeführten Apps für die für Schleife ausgeführt habe, läuft die App sehr langsam! Auch wenn Asynctask verwendet, funktioniert es immer noch langsam!
Ich bin ein bisschen neu, aber ich möchte gute Rat > Ich habe es auch ausprobiert .. < /p>

public ArrayList getData(int month ,int year,String name){
open();
ArrayList list = new ArrayList();

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;
}
< /code>

funktioniert aber immer noch nicht .. < /p>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post