foreach中的foreach从列表中删除项目

时间:2019-06-11 18:49:06

标签: java list loops foreach

我正在基于谁创建Java应用程序。现在,我正在制定一种方法,在回答问题时,我需要其他卡片。

我有两个列表:

一个列表是一个ImageView列表,其中有我必须显示的24张图像视图。

另一个列表是24个地图对象的列表。

现在,如果图像视图的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;
}

3 个答案:

答案 0 :(得分:1)

一些指针:

1)<ul id="list1"> <li><a href="#">A</a></li> <li><a href="#">B</a></li> </ul> <a href="#" /> <input id="f" />仅在因此allCards.remove(imageView);中覆盖了equals()时才有效

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

ImageView

只有在您说出以下内容时,您才会删除该元素:

  

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

这种方式会更好:

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

使用Iterator,您可以使事情更简单,而无需依赖equals()覆盖:

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

使用Java 8,您甚至可以做到这一点:

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;
}

此代码有效。

答案 1 :(得分:0)

  

我尝试在foreach中进行一次foreach,然后从   列表,但我不知道。

只需使用普通的for循环,然后根据索引从allCards中删除该项目即可。

代码段:

public List<ImageView> getImageViews(List<Card> newCards){
    for (int i = 0; i < newCards.size(); i++) {
        String cardName = newCards.get(i).getName().toLowerCase();
        for (int j = 0; j < allCards.size(); j++){
            String imageName = allCards.get(j).getId().toLowerCase();
            if (imageName.equals(cardName)){
                allCards.remove(j);
                break;
            }
        }
    }
    return allCards;
}

答案 2 :(得分:0)

只需创建另一个数组即可。更轻松,更少的代码。我的Java可能并不完全正确,已经有一段时间了。但希望您能明白:

public List<ImageView> getImageViews(List<Card> newCards){
 List<Card> returnObject = new List<Card>();
for (ImageView imageView: new ArrayList<>(allCards)) {
    String imageName = imageView.getId().toLowerCase();

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

          //Instead of a NOT, let's look for an IS
        if (imageName.equals(cardName)){
            returnObject.add(imageView)
        }
    }
}

return allCards;

}