https://kotlinlang.org logo
#russian
Title
# russian
a

Alexjok

01/17/2019, 2:10 PM
Привет всем! Ребят подскажите как переписать в функциональном стиле код по ссылке, хочу нарезать его на партиции по endPart и слепить строки в value вместе (пример работает, но выглядит не ок): https://try.kotlinlang.org/#/UserProjects/tg1br08satke7r89jd1bs8es3b/tlo4s04f8o1oimcpvldmf0c11b
s

sergey.trufanov

01/17/2019, 3:30 PM
@Alexjok Что значит
нарезать его на партиции по
?
a

Alexjok

01/17/2019, 3:42 PM
Имел в виду, сделать слияние (конкатенацию) значений value между 0 и 1, сохраняя при этом порядок. Точно как в примере по ссылке. Количество записей между 0 и 1 может быть
любым
t

tapac

01/19/2019, 10:09 PM
Насколько я знаю каких-то готовых функций для такого нет, но можно сделать свою
Copy code
fun <T> List<T>.partition(nextPartition: (T) -> Boolean) : List<List<T>> {
  val result = mutableListOf<MutableList<T>>()
  var current = mutableListOf<T>()
  val last = size - 1
  result += current
  forEachIndexed { index, el ->
    current.add(el)
    if (nextPartition(el) && index != last) {
      current = mutableListOf()
      result += current
    }
  }
  return result
}

fun main(args: Array<String>) {
  val testList = mutableListOf<Test>()
  createList(testList)

  testList.partition { it.endPart == 1 }.forEach {
    println(it.joinToString(" ") { it.value })
  }
}
a

Alexjok

01/21/2019, 7:51 AM
Андрей, спасибо! Это конечно решает задачу, но выглядит весьма громоздко) Надеялся, что есть какая-то возможность языка о которой я не слышал/не знал и т.д. Все равно спасибо, решение интересное)
t

tapac

01/21/2019, 7:52 AM
Просто такую функцию можно положить в свои утилитные и использовать там где нужно)