我有2个数组列表,称为赋值和人,也有不同类型和不同大小。 问题陈述:我想从人员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的项目将被删除.plz任何帮助将不胜感激。 我需要强大且复杂度较低的逻辑
答案 0 :(得分:0)
您可以将所有配额的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
异常答案 1 :(得分:0)
令人困惑:您打算在列表上工作并比较地图条目。
你可以:
让您的Person
和Assignment
类都实现与getId
的通用界面。
在两个类中覆盖equals
,以便具有相同id的对象相等。您可以使用Object
将getId
参数投射到公共接口的实例。
您还应该覆盖hashCode
,以便具有相同ID的对象具有相同的哈希码。如果id是对象,您可以返回getId().getHashCode()
。
然后,您可以执行persons.removeAll(assignments)
作为旁注,所有这些都不是真的“干净”;但它会完成特定用例的工作。如果您打算为库提供许多其他用例,请不要依赖此