У меня есть 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, но это не сработало.
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)
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.