У меня есть 2 списка данных:

data class PatientData(var patientID: String, var patientName:String, var patientPhone:String)

var list1: List<PatientData>?=null
var list2: List<PatientData>?=null

Мне нужно определить, является ли list1 дубликатом list2. Один из способов определить это - сопоставление по идентификатору пациента.

Я пробовал разные способы, такие как zip и contentEquals, но это не сработало.

0
user14276848 29 Сен 2020 в 18:44

1 ответ

Лучший ответ

Ваш класс данных делает большую часть работы по сравнению за вас из коробки, так что это просто случай проведения некоторых сравнений коллекций.

Как говорит Анимеш, вы можете проверить размер и containsAll (если вы знаете, что они одного размера, вам нужно выполнить проверку containsAll только в одном направлении)

if (list1.size == list2.size && list1.containsAll(list2))

Вы можете отсортировать списки, а затем напрямую сравнить их (поскольку ваши классы не реализуют Comparable, нам придется сделать это самим, patientId - хороший выбор, если предположить, что это уникальное значение)

if (list1.sortedBy { it.patientID } == list2.sortedBy { patientID })

Или вы можете действительно захотеть использовать для этого Set, если вы в любом случае не хотите дублировать объекты PatientData - это позволит вам создавать хорошие свойства набора, такие как объединения и пересечения, но для целей сравнения два набора равны, если они содержат один и тот же набор элементов

if (set1 == set2)
0
cactustictacs 29 Сен 2020 в 19:29