Ich habe eine String ArraList
, die aus der DB ausfüllen. Und ein Object ArrayList
, dass jedes Objekt einige String
enthält. Nun möchte ich die String ArrayList
mit einer der Strings jedes Objekts in der Object ArrayList
vergleichen. Wenn es gleich ist, muss das Objekt von Object ArrayList
entfernt werden. Hier ist mein Method
Code:Vergleichen Sie Objekt ArrayList mit String ArrayList
public ArrayList checkMatches(ArrayList<IceCream> iceCreams, ArrayList<String> blackListPartCodes) { // output is filtered Object ArrayList and two Input,
//one is the Object ArrayList and other is String ArrayList
int i, j;
for(i = 0; i<iceCreams.size(); i++) { // Object ArrayList
IceCream iceCream = iceCreams.get(i);
for(j = 0; j<blackListPartCodes.size(); j++) { //String ArrayList
if ((iceCream.getPartCode().matches(blackListPartCodes.get(j)) || iceCream.getPartCode().equals(blackListPartCodes.get(j)))) {
iceCreams.remove(iceCream);
}
}
}
return iceCreams;
}
Ok, Wenn ich diese Methode verwenden, es einige Objekte aus meinem Objekt entfernt und die Länge der Arraylist verringern, aber nicht richtig funktionieren. Ich mache etwas falsch?
habe ich diesen Code in meiner Anwendung, wenn Methode funktionieren oder nicht, um zu sehen:
Toast.makeText(getApplicationContext(), "Before : " + iceCreams.size(), Toast.LENGTH_LONG).show(); //324
checkMatches(iceCreams, blackListPartCodes);
Toast.makeText(getApplicationContext(), "After : " + iceCreams.size(), Toast.LENGTH_LONG).show(); //200
Die erste lenght
von iceCreams
324 ist und wenn Methode interagieren die lenght
ist 200. las ich String Arraylist (blackListPartCodes) von DB, dass, wenn ich select Count(myField) from MyTable
benutze es sagt, dass es 215 Reihen hat. das heißt, wenn es richtig funktioniert, soll 324-215 sein, das ist 109. Von der anderen Seite zeige ich eine der Zeichenfolgen jedes Objekts in ListView
an. Via dies:
for(int i = 0; i<iceCreams.size(); i++) { // the filtered iceCreams after calling `checkMatches`method.
typeArray.add(iceCreams.get(i).getPartName()); // String ArrayList
typeAdapter.getItemViewType(R.id.listView); //Adapter of the Array
iceCreamTypeList.setAdapter(typeAdapter); //Adapter set to ListView
}
Aber im Hinblick auf die Felder, die es gibt in blackListPartCodes
noch sind.
'aber nicht funktioniert correctly', was Sie damit meinen Sie? –
Lass mich raten: 'ConcurrentModificationException'. Einfach auf SO und im Internet suchbar. Außerdem ist die Verwendung von 'remove (Object)' im Allgemeinen nicht sehr performant, da Sie über die Liste iterieren müssen. Oder, wenn es die richtige nicht entfernt, könnte es nützlich sein, Ihre 'equals'-Implementierung zu zeigen. –
Ich bearbeitete die Frage. –