【发布时间】:2020-07-23 07:33:27
【问题描述】:
我使用 for 循环并制作 deepCopy 从列表列表中删除了特定元素。有没有其他方法可以从列表列表中删除特定元素?
import java.util.ArrayList;
import java.util.List;
public class HelloWorld{
public static void main(String []args){
List<ArrayList<String>> listA = new ArrayList<ArrayList<String>>();
ArrayList<String> list1 = new ArrayList<String>();
list1.add("cucumber");
ArrayList<String> list2 = new ArrayList<String>();
list2.add("carrot");
ArrayList<String> list3 = new ArrayList<String>();
list3.add("spinach");
ArrayList<String> list4 = new ArrayList<String>();
list4.add("kale");
listA.add(list1);
listA.add(list2);
listA.add(list3);
listA.add(list4);
System.out.println("Original-->"+listA);
List<List<String>> deepCopyOfListA = new ArrayList<List<String>>(listA);
System.out.println("Deepcopy -->"+deepCopyOfListA);
for (List<String> item : deepCopyOfListA) {
if (item.contains("kale") || item.contains("cucumber")){
listA.remove(item);
}
}
System.out.println("Final-->"+listA);
}
}
从下面的答案来看,这似乎是最方便的。 使用 Iterator 删除带有 if 条件的所需元素。经过测试,效果很好。谢谢各位的意见。
Iterator<ArrayList<String>> itr = listA.iterator();
while(itr.hasNext()) {
List<String> item = itr.next();
if ((item.contains("cucumber") || item.contains("kale"))) {
itr.remove();
}
【问题讨论】:
-
您正在删除整个列表,而不仅仅是元素
-
您不是在制作浅拷贝,而不是深拷贝 - 这是您的实际代码吗?这里有什么问题?
-
您的变量
DeepCopyOfListA不存在,也许您的意思是deepCopyOfListA? ost 你使用的实际代码 -
按照你做的方式,从外部列表中,如果它有字符串
cucumber,一个完整的内部列表将被删除。这是您想要做的,还是只想从内部列表中删除字符串cucumber? -
我已经编辑了代码以使其与我的工作相匹配。似乎我以前的代码没有让我的问题足够清楚。希望这次编辑能让问题更清楚。