Котлин: Найти Макс Дата список списков - PullRequest
0 голосов
/ 27 сентября 2019

В kotlin Рассмотрим

     data class classA (
      field1
      field2
      ....
       classBlst:List<classB>
      )

      data class classB (
       field3
       field4
       ...
      dateField:String
      )

Проблема состоит в том, чтобы циклически проходить по списку, находить максимальное значение dateField в classBlst и возвращать соответствующее поле 3 для этого элемента.даты, поэтому нужно попробовать .. поймать.

Я могу построить список со всеми максимальными датами, а затем сделать вторую итерацию в этом списке, чтобы найти макс.Я могу сделать это с помощью итераторов, но ищу любой лямбда-функциональный способ сделать то же самое.Извините, новичок во всем этом.

1 Ответ

0 голосов
/ 27 сентября 2019

Учитывая:

data class ClassA(val list: List<ClassB>)
data class ClassB(val field3: Int, val dateField: String? = null)

Вы можете получить самую последнюю дату, используя mapNotNull, где вы отформатируете свою дату и вернете ноль, если получите исключение.

Тогда maxBy в поле, содержащемформатированная дата в вашем новом объекте, созданном в предыдущем mapNotNull

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

val a = ClassA(
    listOf(
        ClassB(0, "24"),
        ClassB(1, "24/03/1987"),
        ClassB(2),
        ClassB(3, "24/03/2024")
    )
)

val res = a.list
    .mapNotNull {
        val dateFormater = DateTimeFormatter.ofPattern("dd/MM/yyyy")
        try {
            Pair(it.field3, LocalDate.parse(it.dateField, dateFormater))
        } catch (e: Exception) {
            null
        }
    }
    .maxBy { it.second }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...