Некоторые указатели:
1) allCards.remove(imageView);
будут работать только в том случае, если равно равно () в ImageView
, следовательно,
2) Это означает, что вы хотите удалить карту, еслиэлементы соединения не совпадают:
if (!imageName.equals(cardName)){
allCards.remove(imageView);
}
Вы удалите элемент только тогда, когда он соответствует, пока вы сказали:
Теперь я хочу удалить ImageViews из списка ImageView, еслиИдентификатор представления изображения совпадает с именем карты в ImageView.
Что-то в этом случае было бы лучше:
if (imageName.equals(cardName)){
allCards.remove(imageView);
break; // to go back to the outer loop
}
С помощью Iterator вы могли бы создавать вещиболее простой и не полагаясь на переопределение equals ():
public List<ImageView> getImageViews(List<Card> newCards){
for (Iterator<ImageView> imageViewIt = allCards.iterator(); imageViewIt.hasNext();) {
ImageView imageView = imageViewIt.next();
String imageName = imageView.getId().toLowerCase();
for (Card card: newCards){
String cardName = card.getName().toLowerCase();
if (imageName.equals(cardName)){
imageViewIt.remove();
break;
}
}
}
return allCards;
}
А с Java 8 вы можете даже сделать это:
public List<ImageView> getImageViews(List<Card> newCards){
allCards.removeIf(view ->
newCards.anyMatch(card ->
card.getName().equalsIgnoreCase(view.getId())
);
return allCards;
}
Этот код работает.