首页 > 解决方案 > 如何从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();
        }

标签: javalistloopsarraylist

解决方案


开始,如果要从内部列表中删除某个元素,则必须先迭代外部元素,然后再使用内部元素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")因为前者对空值友好。


推荐阅读