从ArrayList中删除一些Object属性
我正在维护一个对象的ArrayList
。 我的对象结构是Id,名称,其他一些细节。 我需要删除一个具有一些id值的对象(10)并且我不想迭代列表。 这有什么解决方案吗?
使用Java-8 Collection#removeIf
myList.removeIf(obj -> obj.id == 10);
使用Java-7,您将不得不使用迭代器:
for(Iterator iterator = myList.iterator(); iterator.hasNext(); ) { if(iterator.next().id == 10) iterator.remove(); }
请注意,无论如何都需要列表迭代。 在Java-8 removeIf
方法中,它只是在内部执行。
没有迭代器你就不能这样做,你应该为此做Hashmap。
public class ObjectStructure{ private int Id; private String name; //and any data field you need }
生成所有的setter和getter。
使用此课程
Hashmap data = new HashMap<>();
您只能使用Integer键来添加和删除数据。
data.remove(10);
如果你真的不想迭代列表,你可以使用一个流,但我个人更喜欢Collection#removeIf
如@TagirValeev建议
myList = myList.stream() .filter(x -> x.id() != 10) .collect(Collectors.toList());
如果不以某种forms迭代列表,则无法从ArrayList中删除元素的所有实例。 ArrayList是一个数组,你需要检查数组中的每个元素,看它是否符合删除标准。 在基础层面,这需要循环…迭代元素。
另请注意,从arrays中删除单个元素时,需要移动在删除元素后面具有位置的所有元素。 平均而言,这将是数组元素的一半。
现在,您可以采用避免使用显式for
循环的方式对这些操作进行编码,但无论您如何编写代码,迭代都将在幕后进行。