首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从具有某些对象属性的ArrayList中删除对象

从具有某些对象属性的ArrayList中删除对象
EN

Stack Overflow用户
提问于 2016-03-16 15:15:16
回答 4查看 27.6K关注 0票数 8

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

EN

回答 4

Stack Overflow用户

发布于 2016-03-16 15:15:51

使用Java-8

代码语言:javascript
复制
myList.removeIf(obj -> obj.id == 10);

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

代码语言:javascript
复制
for(Iterator<MyType> iterator = myList.iterator(); iterator.hasNext(); ) {
    if(iterator.next().id == 10)
        iterator.remove();
}

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

票数 46
EN

Stack Overflow用户

发布于 2020-08-14 14:42:02

也许我不理解这个问题,但是为什么没有人建议对那个user类使用override equalshashcode呢?

代码语言:javascript
复制
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 + "'}";
    }
}

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

代码语言:javascript
复制
        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);

上面的代码打印

代码语言:javascript
复制
[MyObject{id='id1', name='name1'}, MyObject{id='id3', name='name3'}]
票数 2
EN

Stack Overflow用户

发布于 2016-03-16 15:29:48

如果你真的不想遍历列表,你可以使用流,但我个人更喜欢Collection#removeIf,就像@TagirValeev建议的那样

代码语言:javascript
复制
myList = myList.stream()
               .filter(x -> x.id() != 10)
               .collect(Collectors.toList());
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36028995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档