我有一个Arraylist
,我用字符串填充。
ArrayList<String> urls = new ArrayList<>();
以下是其中一个字符串的示例。
http://asite.com/some-stuff-qua-sta/api/xml
然后我创建了一个Iterator
来循环遍历它们。这个问题是我在数组中有我不想要的项目。一个例子是:
http://asite.com/some-stuff-test-sta/api/xml
因为它包含“test”,我想从Arraylist中排除它,所以我添加了这样一行。
urls.remove();
这不起作用所以我在填充Arraylist
时尝试添加类似的内容。
!e.getElementsByTagName("name").item(0).getTextContent().contains("test");
这也行不通。有人可以建议一个好的方法吗?
答案 0 :(得分:2)
在Java 8中,removeIf
方法已添加到Collection
。如果Predicate
包含String
,您可以传递"test"
来测试urls.removeIf(string -> string.contains("test"));
以删除这些元素。
gridView1.CustomDrawColumnHeader +=
new ColumnHeaderCustomDrawEventHandler(gridView1_CustomDrawColumnHeader);
void gridView1_CustomDrawColumnHeader(object sender, ColumnHeaderCustomDrawEventArgs e)
{
if (e.Column == _yourColumn)
{
e.Appearance.BackColor = Color.Red;
e.Handled = true;
}
}
答案 1 :(得分:1)
您可以使用Iterator
来迭代并从列表中删除元素。由于我不清楚删除的条件是什么,这里有一个例子:
final List<String> someList = new ArrayList<>();
someList.add("One");
someList.add("Two");
someList.add("Three");
someList.add("Four");
final Iterator<String> iterator = someList.iterator();
while(iterator.hasNext()) {
final String curString = iterator.next();
if (curString.startsWith("T")) {
iterator.remove();
}
}
System.out.println(someList);
答案 2 :(得分:0)
您需要从Iterator
中删除元素,而不是直接从List
其他方面删除ConcurrentModificationException
。
来自javadoc:
此类的迭代器和listIterator返回的迭代器 方法是快速失败的:如果列表在结构上被修改那么 创建迭代器后的时间,以任何方式除外 Iterator自己删除或添加方法,迭代器将抛出一个 ConcurrentModificationException的