Как я могу удалить дубликаты в списке объектов по дате в Kotlin с операторами коллекции? - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть список объектов с тем же идентификатором, затем я хочу сохранить один с самой последней датой, а другой удалить с помощью операторов коллекции kotlin.Например, у меня есть:

{"id":111,
 "date":"02/12/2017"
 }

и другие

{"id":111,
 "date":"02/8/2018"}

В этом случае я хотел бы удалить первый объект.

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Если вам действительно нужно удалить записи из текущей коллекции, вам может помочь следующее (я предполагаю, что ваши объекты (Obj) содержатся в списке с именем list):

list.removeAll { anObj -> list.any { anObj.id == it.id && it.date > anObj.date } }
// or same with removeIf

Этовозможно, проще просто собрать то, что вас на самом деле интересует, а затем создать неизменный список.

Собрать интересующие вас элементы можно было бы следующим образом (конечно же, существует множество других способов сделать это).что ... только один из многих):

val result = list.groupBy { it.id }.values.mapNotNull { it.maxBy { it.date } } // mapNotNull is only used due to maxBy returning a nullable type... it isn't really needed... or well... depends on what your date type is ;-)

result будет тогда List<Obj>.Вместо mapNotNull вы также можете использовать it.maxBy { it.date }!!, если знаете, что есть хотя бы 1 элемент.

Если вам все равно нужно удалить элементы из списка, вы можете сделать следующее:

list.removeIf { it !in result }
// or
list.removeAll { it !in result }

Однако я не могу порекомендовать вам изменить текущий список только для этого ... result в приведенном выше примере уже содержит все элементы в нужной форме (например, List<Obj>).Вместо этого используйте преимущество наличия неизменного списка: -)

0 голосов
/ 11 сентября 2018

Вы можете достичь этого, как это

list.groupBy { it.id }.entries.map { it.value.maxBy { it.date } }

создаст карту id, List<object>, сохраняя первоначальный порядок, а затем выберет новый объект из списка. Здесь я предполагаю, что дата long значение отметки времени

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...