如何通过检查其值从ArrayList中删除元素?

2022-08-31 16:15:54

我有ArrayList,我想从中删除一个具有特定值的元素...

例如。

ArrayList<String> a=new ArrayList<String>();
a.add("abcd");
a.add("acbd");
a.add("dbca");

我知道我们可以迭代arraylist,和.remove()方法来删除元素,但我不知道在迭代时如何做到这一点。如何删除值为“acbd”的元素,即第二个元素?


答案 1

在您的情况下,无需循环访问列表,因为您知道要删除哪个对象。您有几种选择。首先,您可以按索引删除对象(因此,如果您知道,该对象是第二个列表元素):

 a.remove(1);       // indexes are zero-based

或者,您可以删除字符串的第一个匹配项:

 a.remove("acbd");  // removes the first String object that is equal to the
                    // String represented by this literal

或者,删除具有特定值的所有字符串:

 while(a.remove("acbd")) {}

如果集合中有更复杂的对象,并且想要删除具有特定属性的实例,则情况会稍微复杂一些。因此,您无法通过对与要删除的对象相等的对象来删除它们。remove

在这些情况下,我通常使用第二个列表来收集我要删除的所有实例,并在第二次过程中删除它们:

 List<MyBean> deleteCandidates = new ArrayList<>();
 List<MyBean> myBeans = getThemFromSomewhere();

 // Pass 1 - collect delete candidates
 for (MyBean myBean : myBeans) {
    if (shallBeDeleted(myBean)) {
       deleteCandidates.add(myBean);
    }
 }

 // Pass 2 - delete
 for (MyBean deleteCandidate : deleteCandidates) {
    myBeans.remove(deleteCandidate);
 }

答案 2

单行 (java8):

list.removeIf(s -> s.equals("acbd")); // removes all instances, not just the 1st one

(隐式完成所有迭代)