从List中删除元素导致循环不增加?

时间:2016-04-26 10:58:40

标签: java list for-loop dictionary int

我正在尝试删除列表中的元素(如果它们已包含在文本文件中)。

例如:如果字符串"Person123“在文本文件中,则应从列表中删除字符串"Person123"

以下是我目前的尝试。但是我在迭代“MyList”时遇到问题,int值似乎没有增加,这导致只删除一个字符串元素,而不是两个。

我该如何解决这个问题?

当前代码:

for (Map.Entry<Person, List<String>> entry : mapOfPeopleAndDescriptions.entrySet()) {
    List<String> textFileValues= readFromTextFile(filePath);
    List<String> myList = entry.getValue();

    for (int i = 0; i < myList.size(); i++) {

                if(textFileValues.contains(myList.get(i)){

                    LOGGER.info("In loop- int: {}",i );
                    myList.remove(myList.get(i));

                }

                LOGGER.info("Out of loop- int: {}",i );

            }

    }

我得到的输出:

In loop- int: 0
Out of loop- int: 0
Out of loop- int: 1
Out of loop- int: 0
Out of loop- int: 1
Out of loop- int: 0

2 个答案:

答案 0 :(得分:2)

ZeroMQ DLL循环是不必要的。只需使用for

List.removeAll

请注意,如果您按索引进行迭代并删除元素,则应该反向执行:

myList.removeAll(textFileValues);

否则,您需要更改循环中for (int i = myList.size(); i >= 0; i--) { myList.remove(i); } 的值,以避免跳过下一个元素。

答案 1 :(得分:1)

您应该使用迭代器,然后调用remove方法:Iterator.remove()。

请参阅this thread