Как эффективно проверять общие элементы двух списков разных типов (класса A и класса B) и составлять результирующий списJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как эффективно проверять общие элементы двух списков разных типов (класса A и класса B) и составлять результирующий спис

Сообщение Anonymous »

У меня есть список класса A из 1000 элементов, каждый из которых имеет уникальные идентификаторы. Существует другой класс B, который также имеет уникальный параметр id, и этот B является свойством json класса R.
отношение такое:
A: {"id" :id1,
"usedBy": {
"type": "Некоторый ENUM, представляющий класс B",
"id ": "id2",
}
},
Объект B, который используется в объекте A, является независимым и может быть удален извне из какого-либо другого запроса. а также, что делает зависимый объект A устаревшим/недействительным. также в системе может быть много других объектов типа B и не все из них нужно связывать с типом R.
Задача состоит в том, чтобы проверить все такие невалидные объекты типа A, для которых зависимы B больше не существует в системе, и периодически удаляйте недействительные A.
Может ли кто-нибудь подсказать лучший способ решения этой проблемы, спасибо.
Во-первых, я перечислили все элементы класса A в l1, затем перечислили все уникальные идентификаторы класса B, которые используются в классе A в l2.
Теперь есть список l3, в котором собраны все такие недопустимые идентификаторы класса B, которые находятся в l2, но не в ( l1.gentContent().getUsedBy().getId() )
теперь есть список l3 со всеми такими несуществующими идентификаторами типа B, и для всех эти идентификаторы должны удалить зависимый объект класса A. Но в этом подходе используется множество if else и вложенный цикл, что, во-первых, не кажется впечатляющим, а также неприемлемо для проверок качества программного обеспечения, поскольку в методе допускается только 3 if/else/for.
Может ли кто-нибудь подсказать лучший способ решения этой проблемы? Спасибо.
**Это фрагмент, который я пробовал **
публично void validateForAutoCleanUp(контекст OperationContext, страница страницы) {
Список инвалидовToDelete = новый ArrayList();
Список существующих = page.getContent().stream().toList( );
List usedByIds = page.getContent().stream().map(Class A::getUsedBy).map(UsedBy::getId).toList();

List b = service.getAllofTypeB(context, pageNumber, pageSize, null, null).block();
if (b != null) {
List invalidUsedByIds = usedByIds.stream().filter(id -> ! b.stream().map(Class B::getId).toList().contains(id)).toList();
if (!invalidUsedByIds.isEmpty()) {
for (Class A a : existing) {
for (String invalidId : invalidUsedByIds) {
if (a.getUsedBy().getId().equals(invalidId)) {
invalidsToDelete.add(a);
break;
}
}
}
if (!invalidsToDelete.isEmpty())
invalidsToDelete.forEach(i -> service.deleteById(context, i.getId()).block());
} else {
page.getContent().forEach(a -> service.deleteById(context, a.getId()).block());
}
}


Подробнее здесь: https://stackoverflow.com/questions/791 ... ypes-class
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»