我想从 arraylist 中删除多个项目。
这是列表:
String1-1, String5, String6, String1-2, String5, String6, String1-3, String5, String6
我想String1-从列表中删除。但是因为不是所有的String1-都有相同的结尾,所以它们没有被删除。所以list.remove("String1-")不工作。
问题是:当我要删除的字符串的结尾不同时,如何从 arraylist 中删除多个项目。
没有单一的方法可以做到这一点,但是如果您遍历ArrayList并使用该String.startsWith方法来测试字符串是否以 . 开头,则可以很容易地做到这一点"String1-"。
这是一个例子。请注意,我使用了迭代器,因为它比使用for循环更容易从数组中删除内容。
Iterator<String> it = arrayList.iterator();
while (it.hasNext() ) {
String value = it.next();
if (value.startsWith("String1-") ) {
it.remove();
}
}
为了将来参考,这里有一个使用 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只包含您指定的元素的新例程。这样做的美妙之处在于它是惰性执行的(仅在您真正想要使用它时才评估)并且它不会修改原始集合。在大多数情况下,使您的软件状态不可变(不可修改)是您能做的最好的事情。处理可变集合很困难,它们通常是软件错误的原因。