У меня есть список массивов, называемый присваиванием, и человеком, и оба типа и разных размеров. Заявление о проблемах: я хочу удалить элементы из человека, где идентификатор человека равен идентификатору присваивания, я hv, написанному после компаратора.
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, где все элементы, которые не содержат идентификатор назначения, будут удалены. Plz любая помощь будет оценена. Мне нужна логика, которая надежна с меньшей сложностью
Это сбивает с толку: вы намереваетесь работать над списками и сравнивать записи в карте.
Вы могли бы просто:
Пусть ваши классы Person
и Assignment
реализуют общий интерфейс с getId
.
Overide equals
в обоих классах, так что объекты с одинаковым id равны. Вы должны getId
параметры Object
в экземпляры вашего общего интерфейса с помощью getId
.
Вы также должны переопределить hashCode
чтобы объекты с одним и тем же идентификатором имели один и тот же хэш-код. Вы можете просто вернуть getId().getHashCode()
если id - объект.
Затем вы можете сделать persons.removeAll(assignments)
В качестве побочного примечания все это не совсем "чистое"; но он выполнил бы работу для этого конкретного варианта использования. Просто не полагайтесь на это, если вы намереваетесь предоставить библиотеку множество других случаев использования
Вы можете сохранить все идентификаторы привязок в 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