我正在维护一个对象的ArrayList。我的对象结构是Id、名称和其他一些细节。我需要删除一个具有某个id值的对象,比如(10),并且我不想遍历列表。对此有什么解决方案吗?
发布于 2016-03-16 15:15:51
使用Java-8
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 removeIf方法中,它只是在内部执行。
发布于 2020-08-14 14:42:02
也许我不理解这个问题,但是为什么没有人建议对那个user类使用override equals和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'}]发布于 2016-03-16 15:29:48
如果你真的不想遍历列表,你可以使用流,但我个人更喜欢Collection#removeIf,就像@TagirValeev建议的那样
myList = myList.stream()
.filter(x -> x.id() != 10)
.collect(Collectors.toList());https://stackoverflow.com/questions/36028995
复制相似问题