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