java - 如何从java列表中删除特定元素?
问题描述
我使用 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();
}
解决方案
从java-8开始,如果要从内部列表中删除某个元素,则必须先迭代外部元素,然后再使用内部元素List::removeIf
:
// Mutates the original list
List<List<String>> outerList = ...
for (List<String> innerList : outerList) {
innerList.removeIf(item -> "cucumber".equals(item));
}
// Creates a new one while keeping the original untouched
List<List<String>> newList = outerList.stream()
.map(innerList -> innerList.stream()
.filter(item -> !"cucumber".equals(item))
.collect(Collectors.toList()))
.collect(Collectors.toList());
对于低于 8 的版本,您应该使用正确的删除方式Iterator
:
for (final List<String> innerList: outerList) {
Iterator<String> iterator = innerList.iterator();
while (iterator.hasNext()) {
if ("cucumber".equals(item)) {
iterator .remove();
}
}
}
在任何情况下,使用"cucumber".equals(item)
而不是item.equals("cucumber")
因为前者对空值友好。
推荐阅读
- angular - Form.io Angular - 修改默认组件的颜色
- r - 根据数据框中的字符串搜索和替换文件名。在 R 中
- html - 如何删除样式
- php - PHP simplexml_load_file() 合并具有相同 ID 的 xml 字段
- android - Xamarin android 应用程序崩溃,并在 Google Play Console Vitals 中报告错误 android.runtime.JavaProxyThrowable
- google-sheets-formula - Google 表格查询 - 2 个查询内的算术查询
- airflow - AWS Snowflake 连接中的 MWAA Airflow 2.0 未显示
- javascript - 从数组中返回字符串出现的对象(Javascript)
- java - Hazelcast:IllegalArgumentException:目标是这个节点
- regex - RE 中的哪个组匹配?