1

我想从 arraylist 中删除多个项目。

这是列表:

String1-1, String5, String6, String1-2, String5, String6, String1-3, String5, String6

我想String1-从列表中删除。但是因为不是所有的String1-都有相同的结尾,所以它们没有被删除。所以list.remove("String1-")不工作。

问题是:当我要删除的字符串的结尾不同时,如何从 arraylist 中删除多个项目。

4

2 回答 2

9

没有单一的方法可以做到这一点,但是如果您遍历ArrayList并使用该String.startsWith方法来测试字符串是否以 . 开头,则可以很容易地做到这一点"String1-"

这是一个例子。请注意,我使用了迭代器,因为它比使用for循环更容易从数组中删除内容。

Iterator<String> it = arrayList.iterator();
while (it.hasNext() ) {
   String value = it.next();
   if (value.startsWith("String1-") ) {
     it.remove();
   }
}
于 2013-08-28T15:21:44.017 回答
1

为了将来参考,这里有一个使用 Google Guava 的解决方案。

一些设置代码从问题的字符串创建列表:

String stringsString = "String1-1, String5, String6, String1-2, String5, String6, String1-3, String5, String6";
String[] stringsArray = stringsString.split(", ");
Iterable<String> stringsList = Arrays.asList(stringsArray);

现在过滤掉不需要的项目:

Iterable<String> filtered = Iterables.filter(stringsList, new Predicate<String>() {
    @Override
    public boolean apply(String input) {
        return !input.startsWith("String1-");
    }
});

这个简单的例程创建一个Iterable只包含您指定的元素的新例程。这样做的美妙之处在于它是惰性执行的(仅在您真正想要使用它时才评估)并且它不会修改原始集合。在大多数情况下,使您的软件状态不可变(不可修改)是您能做的最好的事情。处理可变集合很困难,它们通常是软件错误的原因。

于 2013-08-28T16:06:15.540 回答