Java 从ArrayList中删除具有特定名称的项

Java 从ArrayList中删除具有特定名称的项,java,android,arraylist,Java,Android,Arraylist,我有一个ArrayList,它有时可以包含时间GMT、无和不同位置的无传感器的值。我想删除所有这些实例,所以我写了一个小for循环: for(int i = 0; i < trackedFieldsMod.size(); i++ ) { if(trackedFieldsMod.get(i).equalsIgnoreCase("Time (GMT)") || trackedFieldsMod.get(i).equalsIgnoreCase("None") || trackedFiel

我有一个ArrayList,它有时可以包含时间GMT、无和不同位置的无传感器的值。我想删除所有这些实例,所以我写了一个小for循环:

for(int i = 0; i < trackedFieldsMod.size(); i++ ) {
    if(trackedFieldsMod.get(i).equalsIgnoreCase("Time (GMT)") || trackedFieldsMod.get(i).equalsIgnoreCase("None") || trackedFieldsMod.get(i).equalsIgnoreCase("No Sensor")) {
        trackedFieldsMod.remove(i); //Don't let users find average/mean/etc for irrelevant fields
    }
}

由于某种原因,这将删除列表开始时的时间GMT,并且在列表末尾没有任何传感器,但是如果我的ARARYLIST中间没有或没有传感器,则它们不会被删除。我一辈子都不知道为什么。有什么想法吗?谢谢

当您删除位置i处的列表项时,以前位于i+1处的项将移动到i,所有内容将向i移动1个单元格


然而,在下一个for循环迭代中,i变成i+1,因此基本上您将跳过先前在remove操作中从i+1移动到i的项。删除项目时需要减小i。

删除位置i处的列表项目时,以前位于i+1处的项目将移动到i。所有内容都将1个单元格移向i


然而,在下一个for循环迭代中,i变成i+1,因此基本上您将跳过先前在remove操作中从i+1移动到i的项。删除项目时需要减小i。

只需使用contains字符串方法即可。。它应该可以解决您的问题

只需使用contains字符串方法即可。。它应该可以解决您的问题

我通常会使用迭代器来实现这一点:

for (Iterator<String> iterator = trackedFieldsMod.iterator(); iterator.hasNext();) {
    String string = iterator.next();
     if("Time (GMT)".equalsIgnoreCase(string) || "None".equalsIgnoreCase(string) || "No Sendor".equalsIgnoreCase(string)) {
            iterator.remove(); //Don't let users find average/mean/etc for irrelevant fields
     }
}

我通常会使用迭代器来实现这一点:

for (Iterator<String> iterator = trackedFieldsMod.iterator(); iterator.hasNext();) {
    String string = iterator.next();
     if("Time (GMT)".equalsIgnoreCase(string) || "None".equalsIgnoreCase(string) || "No Sendor".equalsIgnoreCase(string)) {
            iterator.remove(); //Don't let users find average/mean/etc for irrelevant fields
     }
}

为了完整起见,我要补充一点,您也可以使用一些方便的方法来完成这类工作:

List<String> toRemove = Arrays.asList("Time (GMT)", "None", "No Sendor");
trackedFieldsMod.removeAll( toRemove );

为了完整起见,我要补充一点,您也可以使用一些方便的方法来完成这类工作:

List<String> toRemove = Arrays.asList("Time (GMT)", "None", "No Sendor");
trackedFieldsMod.removeAll( toRemove );

不过,这只适用于两个相邻的事件。当然。我的朋友,你是一位绅士,一位学者。我将在7分钟内接受你的答案,HaaAdEdter迭代器和匹配可能是最简单的。我玩迭代器,但我只在C++中使用过它们,而java缺少指针,我就感到困惑和不安。但是,是的,我知道迭代器解决了这个问题,这个问题只适用于两个相邻的事件,当然了。我的朋友,你是一位绅士,一位学者。我将在7分钟内接受你的答案,HaaAdEdter迭代器和匹配可能是最简单的。我玩迭代器,但我只在C++中使用过它们,而java缺少指针,我就感到困惑和不安。但我知道迭代器可以解决这个问题