比较两种不同类型的arraylist

时间:2014-05-02 09:41:07

标签: java arraylist

我有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任何帮助将不胜感激。 我需要强大且复杂度较低的逻辑

2 个答案:

答案 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();
    }
}
  1. 以上代码无法抛出ArrayOutOfBounds异常
  2. 它具有数组大小的线性复杂性

答案 1 :(得分:0)

令人困惑:您打算在列表上工作并比较地图条目。

你可以:

  • 让您的PersonAssignment类都实现与getId的通用界面。

  • 在两个类中覆盖equals,以便具有相同id的对象相等。您可以使用ObjectgetId参数投射到公共接口的实例。

  • 您还应该覆盖hashCode,以便具有相同ID的对象具有相同的哈希码。如果id是对象,您可以返回getId().getHashCode()

  • 然后,您可以执行persons.removeAll(assignments)

作为旁注,所有这些都不是真的“干净”;但它会完成特定用例的工作。如果您打算为库提供许多其他用例,请不要依赖此