当前位置: 首页 > 知识库问答 >
问题:

使用一些Object属性从ArrayList中删除对象

拓拔麒
2023-03-14

我正在维护一个ArrayList对象。我的对象结构是Id、name和一些其他细节。我需要删除一个带有一些id值的对象,比如(10),我不想遍历列表。有什么解决方案吗?

共有3个答案

赫连捷
2023-03-14

如果你真的不想在列表上迭代,你可以使用流,但我个人更喜欢@TagirValeev建议的收集

myList = myList.stream()
               .filter(x -> x.id() != 10)
               .collect(Collectors.toList());
管杜吟
2023-03-14

也许我不理解这个问题,但为什么没有人建议对该用户类使用overrideequals和hashcode?

class MyObject {
    final String id;
    final String name;

    MyObject(String id, String name) {
        this.id = id;
        this.name = name;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        return Objects.equals(id, ((MyObject) o).id);
    }

    @Override
    public int hashCode() {
        return id != null ? id.hashCode() : 0;
    }

    @Override
    public String toString() {
        return "MyObject{id='" + id + "', name='" + name + "'}";
    }
}

在这种情况下,您可以轻松地从列表中删除任何对象

        final ArrayList<MyObject> list = new ArrayList<>();
        list.add(new MyObject("id1", "name1"));
        list.add(new MyObject("id2", "name2"));
        list.add(new MyObject("id3", "name3"));

        MyObject removeCandidate = new MyObject("id2", "name2");

        list.remove(removeCandidate);
        System.out.println(list);

打印上面的代码

[MyObject{id='id1', name='name1'}, MyObject{id='id3', name='name3'}]

养淇
2023-03-14

使用Java-8Collection#Remote veIF

myList.removeIf(obj -> obj.id == 10);

在Java-7中,您必须使用迭代器:

for(Iterator<MyType> iterator = myList.iterator(); iterator.hasNext(); ) {
    if(iterator.next().id == 10)
        iterator.remove();
}

请注意,列表迭代在任何情况下都是必要的。在Java-8方法中,它只是在内部执行。

 类似资料:
  • 从 JSON 对象删除除了指定属性之外的任何其他属性。 使用 Object.keys() 方法遍历给定的 JSON 对象并删除给定数组中不包含的 keys 。 如果你传递一个特殊的键 childIndicator ,它也会深入地将这个函数应用到内部对象中。 const cleanObj = (obj, keysToKeep = [], childIndicator) => { Object.k

  • 问题内容: 我有一个具有静态对象ArrayList的ClassA 现在,我要像这样从此列表中删除一个对象 这是用Meteorit类编写的。但是,当我想使用ArrayList中的对象时,它将引发异常。 我使用Iterator从ArrayList中删除对象,但是现在我不知道如何在这种情况下使用它。 问题答案: 这是因为某个线程实际上正在for每个循环中查看此列表,也许您正在尝试在for-each主体中

  • 问题内容: 如何删除JavaScript对象中或JavaScript对象中的所有属性? (问题与此数组类似) 问题答案: 您可以遍历对象: 如果您担心此属性删除不会使对象的proptype链运行起来,则还可以: 有关null与未定义的一些注意事项:

  • 问题内容: 说我创建一个对象,如下所示: 删除该属性以使其最终成为new 的最佳方法是什么? 问题答案: 像这样: 演示版

  • 问题内容: 我有一个JSON: 我试图删除所有以 “ umb_” 开头的属性。这在json.net中可能吗? 输出将是这样的: 使用删除我能够做到,但是不能一次全部完成。 有什么建议吗? 问题答案: 您可以先解析字符串: 更新 或: 更新#2 您可以在子句中指定更多条件: 要么 或任何您需要的。

  • 问题内容: 如果满足条件,我需要从中删除一些对象,我想知道哪种方法会更有效。 情况如下:我有一个包含包含其他一些对象的类。我必须对此进行迭代,并删除满足特定条件的所有元素。据我所知,这些是我要删除的选项: 创建一个新的并添加不符合条件的元素。迭代之后,从旧的数组列表交换到没有元素的新数组列表。 创建一个新的并添加满足条件的元素。迭代后,使用传递要删除对象的方法。 有没有更有效的方法从中删除对象?