исходные данные: массив
целевые возвращаемые данные: список >
Исходные данные (Массив ) содержат список jpegs книги в виде (Scan0001.jpg, Scan0002.jpg, ..., Scan000n.jpg). Первый файл (Scan0001.jpg) всегда является передней обложкой книги, а последний файл (Scan000n.jpg) всегда является задней обложкой книги. Переменные файлы в следующем фрагменте кода являются массивом который содержит только файлы JPEG в виде Scanxxxx.jpg.
Я хочу создать пары файлов страниц со следующими правилами:
1) Обложки (спереди, сзади) всегда должна быть пара (Файл Scan0001.jpg, Scan000n.jpg соответственно)
2) Если неперекрывающие страницы неровные (имеется в виду, что на последней странице нет пары), то должна быть пара (Файл Scan000n-1.jpg)
3) Передняя обложка всегда должна быть первой парой файлов, а задняя обложка всегда должна быть последней
Следующий код работает, но я чувствую себя там пространство для совершенствования с точки зрения более эффективного или более чистого кода
val files = selectedFolder.listFiles()
val preliminaryResult = files.toMutableList()
val result = mutableListOf<Pair<File?,File?>>()
result.add(Pair(preliminaryResult.first(),null))
preliminaryResult.removeAt(0)
result.add(Pair(preliminaryResult.last(),null))
preliminaryResult.removeAt(preliminaryResult.size-1)
result.addAll(preliminaryResult.map{
if(preliminaryResult.indexOf(it) % 2 == 0) {
Pair(it,preliminaryResult.getOrNull(preliminaryResult.indexOf(it)+1))
} else {
Pair(null,null)
}
})
result.removeAll{
it == Pair(null,null)
}
result.add(result[1])
result.removeAt(1)