Wie kann ich Daten von ArrayList filtern? zum Beispiel habe ich eine Klasse namens "Date Names". i schrieb wenig von Code unten für meine Erklärung:Was ist der schnellste Weg, Daten von ArrayList zu filtern?
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...
und ich bevölkern zur Datenbank wie folgt aus:
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"));
und dann bekomme ich die Daten so zu Arraylist:
ArrayList<DateAndNames> list = new ArrayList<DateAndNames>();
list = hand.getData();
und bevor ich die Liste an den BaseAdapter übergebe, möchte ich es filtern, also was ich gerade mache ist das:
jetzt, das große Problem ist: wenn ich sehr sehr sehr große Daten auf der for-Schleife wie 300 Zeilen zu filtern haben, läuft die App sehr langsam! Selbst wenn asyncTask verwendet wird, funktioniert es immer noch langsam! ich bin ein bisschen neu, aber ich würde
Edited für gute Ratschläge wie: ich dies auch versucht ..
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;
}
aber immer noch nicht funktioniert ..
Können Sie die Datenbankabfrage ändern, die Sie verwenden, um die Zeilen auszuwählen? Wenn Sie sagen 'Wählen Sie aus dates_and_names wo month = month && year = year' dann werden die Daten gefiltert, bevor Sie es in Java bringen – user384842
Benötigen Sie 'filteredList' um neue' DateAndNames' Objekte zu enthalten, oder ist es OK für 'filteredList 'Verweise auf dieselben Objekte in' list' enthalten? Ich weiß nicht, was der Rest deines Programms macht, also kann ich das nicht beantworten. Aber wenn die Listen Referenzen teilen können, wird "data" los und einfach "filteredlist.add (list.get (i))" sagen. Wenn 'list.size()' jedoch nur 300 ist, kann ich nicht sehen, wie es dauern würde, bis Sie es bemerken. – ajb
@ user384842 danke ich möchte zum Beispiel bitte. – Anna