У меня есть String ArraList
, которые заполняются из базы данных. И Object ArrayList
, что каждый объект содержит String
. Теперь я хочу сравнить String ArrayList
с одной из строк каждого объекта в Object ArrayList
. Если он равен объекту от Object ArrayList
, его необходимо удалить. Вот мой Method
Код:Сравнить Object ArrayList со 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;
}
Хорошо, когда я использую этот метод, он удаляет некоторые объекты из моего объекта и уменьшить длину в ArrayList, но не работает правильно. Я делаю что-то неправильно?
Я использовал этот код в моем приложении, чтобы увидеть, если метод отлично работает или нет:
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
Первый lenght
из iceCreams
324 и когда метод взаимодействуют между собой lenght
200. Я прочитал Струнный ArrayList (blackListPartCodes) из БД, что когда я использую select Count(myField) from MyTable
, он говорит, что у него 215 строк. , что означает, что если он правильно работает, будет 324-215, что составляет 109. С другой стороны я показываю одну из строк каждого объекта в ListView
. Via это:
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
}
Но ввиду поля, которые находятся в blackListPartCodes
все еще существуют.
', но не работает correctly' то, что вы имеете в виду под этим? –
Позвольте мне угадать: 'ConcurrentModificationException'. Легко искать на SO и в Интернете в целом. Кроме того, в общем случае использование 'remove (Object)' не будет ужасно результативным, так как вам придется перебирать список. Или, если он не удаляет правильный, показывая, что реализация 'equals' может быть полезна. –
Отредактировал вопрос. –