Сравните два arraylist разных типов

1

У меня есть список массивов, называемый присваиванием, и человеком, и оба типа и разных размеров. Заявление о проблемах: я хочу удалить элементы из человека, где идентификатор человека равен идентификатору присваивания, я 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 любая помощь будет оценена. Мне нужна логика, которая надежна с меньшей сложностью

  • 0
    1) Вы хотите действительно сравнить массивы или просто удалить элементы из лица, где идентификатор человека равен идентификатору назначения? 2) Вы используете ArrayList или Map?
  • 0
    я ищу более быструю реализацию кода, я не хочу писать цикл for () {for () {}}, чья сложность будет nsquare
Показать ещё 7 комментариев
Теги:
arraylist

2 ответа

0

Это сбивает с толку: вы намереваетесь работать над списками и сравнивать записи в карте.

Вы могли бы просто:

  • Пусть ваши классы Person и Assignment реализуют общий интерфейс с getId.

  • Overide equals в обоих классах, так что объекты с одинаковым id равны. Вы должны getId параметры Object в экземпляры вашего общего интерфейса с помощью getId.

  • Вы также должны переопределить hashCode чтобы объекты с одним и тем же идентификатором имели один и тот же хэш-код. Вы можете просто вернуть getId().getHashCode() если id - объект.

  • Затем вы можете сделать persons.removeAll(assignments)

В качестве побочного примечания все это не совсем "чистое"; но он выполнил бы работу для этого конкретного варианта использования. Просто не полагайтесь на это, если вы намереваетесь предоставить библиотеку множество других случаев использования

  • 0
    Я просто пытаюсь дать caparator оба AssignmentResults, Person, если у вас лучше, чем этот код
0

Вы можете сохранить все идентификаторы привязок в 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. Он имеет линейную сложность по размеру массивов
  • 0
    но я сказал, что назначение и размер лица разные, это выкинет массив из связанного исключения
  • 0
    @Venu, какой массив abt выходит за пределы исключений
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню