[英]Compare two arraylist of different types
我有2个数组列表,分别称为Assignment和Person,它们的类型和大小也不同。 问题陈述:我想从人ID等于工作ID的人中删除项目,我用比较器写。
SortedSet<Map.Entry<AssignmentResults, Person>> text = new TreeSet<Map.Entry<AssignmentResults, Person>>(
new Comparator<Map.Entry<AssignmentResults, Person>>() {
@Override
public int compare(Entry<AssignmentResults, Person> lhs,
Entry<AssignmentResults, Person> rhs) {
// TODO Auto-generated method stub
int statusvalue = 0;
if (rhs.getValue().getId()
.equals(lhs.getKey().getId()))
statusvalue = 1;
return statusvalue;
}
});
但是我不确定如何使用它来获取人员arraylist,其中所有不包含作业ID的项目都将被删除。请帮助。 我需要鲁棒性高,复杂度低的逻辑
您可以将所有分配的ID保存到HashSet
,然后使用for-loop
从人员列表中删除项目:
Set<Long> assigmentsIdsSet = new HashSet<Long>(); // here we will store all assigments' ids
for (AssignmentResults assigment : assigmentsList) { // assigmentsList is your array list of assigments
assigmentsIdsSet.add(assigment.getId());
}
// now go through list of persons and remove persons with ids from assigmentsIdsSet
for (Iterator<Person> it = personList.iterator(); it.hasNext(); ) {
if (assigmentsIdsSet.contains(it.next().getId())) {
it.remove();
}
}
ArrayOutOfBounds
异常 令人困惑:您打算处理列表,并比较地图条目。
您可以:
让您的Person
和Assignment
类都实现与getId
的公共接口。
在两个类中都覆盖equals
,以便具有相同id的对象相等。 您可以使用getId
将Object
参数转换为公共接口的实例。
您还应该覆盖hashCode
以使具有相同ID的对象具有相同的哈希码。 如果id是一个对象,则可以只返回getId().getHashCode()
。
然后,您可以执行persons.removeAll(assignments)
附带说明一下,所有这些都不是真正的“干净”。 但是它将为该特定用例完成工作。 如果您打算为图书馆提供许多其他用例,请不要依赖它
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.