2013-08-28 98 views
1

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

这是列表:

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

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

现在的问题是:如何删除从arraylist多个项目,当我想要删除的字符串的结尾是不一样的。

+0

我提交了一个替代答案,如果你有时间看看它,并试图构思它携带的消息。它可以帮助您避免将来发生大量的错误。 – allprog

回答

9

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

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

Iterator<String> it = arrayList.iterator(); 
while (it.hasNext()) { 
    String value = it.next(); 
    if (value.startsWith("String1-")) { 
    it.remove(); 
    } 
} 
+0

非常感谢!我得到它的工作! –

1

为了将来的参考,这里有一个与谷歌番石榴的解决方案。

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

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仅包含的元素你指定的。这样做的好处在于它是懒惰地执行的(只在你真的想使用它的时候才进行评估)并且它不会修改原始的集合。使您的软件状态不可变(不可修改)在大多数情况下是您可以做的最好的。处理可变集合很难,它们通常是软件错误的原因。

+0

谢谢,也试试这个! –