gpt4 book ai didi

java - Foreach in foreach 从列表中删除项目

转载 作者:行者123 更新时间:2023-11-30 10:02:50 27 4
gpt4 key购买 nike

我正在创建一个基于 who is it? 的 Java 应用程序。现在我正在制作一种方法,在回答问题时我需要其他卡片。

我有两个列表:

列表是一个 ImageView 列表,其中我有卡片必须代表的 24 个 ImageView 。

另一个列表是 24 个 map 对象的列表。

现在,如果 ImageView 的 ID 与 ImageView 中的卡片名称相同,我想从 ImageView 列表中删除 ImageView。

我试图在一个 foreach 中执行一个 foreach,然后从列表中删除一个项目,但我无法弄清楚。

我创建的方法:

public List<ImageView> getImageViews(List<Card> newCards){

for (ImageView imageView: new ArrayList<>(allCards)) {
String imageName = imageView.getId().toLowerCase();

for (Card card: new ArrayList<>(newCards)){
String cardName = card.getName().toLowerCase();

if (!imageName.equals(cardName)){
allCards.remove(imageView);
}
}
}

return allCards;
}

最佳答案

一些提示:

1) allCards.remove(imageView); 仅当 equals() 在 ImageView 中被覆盖时才会起作用

2) 这意味着如果连接元素不匹配,您要删除卡片:

if (!imageName.equals(cardName)){
allCards.remove(imageView);
}

只有当元素与您说的匹配时,您才会删除该元素:

Now I want to remove ImageViews from the ImageView list if an ID of an image view is the same as the name of a card in an ImageView.

这种方式会更好:

if (imageName.equals(cardName)){
allCards.remove(imageView);
break; // to go back to the outer loop
}

有了迭代器,你可以让事情变得更简单,而不依赖于 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;
}

此代码有效。

关于java - Foreach in foreach 从列表中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56550055/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com