Я делаю фильтр изображений, я уже сделал это, но я читал, что для больших коллекций было бы лучше использовать последовательность для итерации, и, поскольку это изображение размером 8 КБ, я полагаю, что получу некоторую производительностьиз-за его ленивой инициализации с Sequence<IntArray>
вместо Array<IntArray>
или даже Sequence<Sequence<Int>>
.Я пока не знаю, возможно ли это, я в замешательстве и пытаюсь выучить для меня эту новую парадигму, и мне трудно найти более простой материал для понимания синтаксиса использования этой концепции.
Это то, что пытался, но это беспорядок, я не очень представляю, как это сделать, или даже если я должен использовать "newImage" в качестве последовательности.
val myPredicate = { array : IntArray -> !array.first() /*???*/ && !array.last() }
image.asSequence().forEach { array ->
array.filter(myPredicate ) // ???
}
Этоявляется функциональным кодом, подлежащим преобразованию:
fun chunker(image : Array<IntArray>) : Array<IntArray> {
val arrayRowSize = image.size
val arrayColSize = image[0].size
val newImage : Array<IntArray> by lazy {
Array(arrayRowSize) { IntArray(arrayColSize) }
}
var kernel = IntArray(9)
// to translate to a Sequence those two for loops
for (row in 1 .. arrayRowSize - 2) {
for (col in 1 .. arrayColSize - 2) {
kernel = changer(row, col, kernel, image)
newImage[row][col] = kernel[4]
}
}
return newImage
}