diff --git a/app/src/main/java/com/sw/platecabinet/GlobalData.kt b/app/src/main/java/com/sw/platecabinet/GlobalData.kt index 484e83f..470e3e9 100644 --- a/app/src/main/java/com/sw/platecabinet/GlobalData.kt +++ b/app/src/main/java/com/sw/platecabinet/GlobalData.kt @@ -15,19 +15,17 @@ object GlobalData { /** * 横排数量 */ - var arrayCross: Int = 5 + var arrayCross: Int = 2 /** * 竖排数量 */ var arrayVertical: Int = 11 - /** * 排列方式 0 垂直 1 水平 */ var arrayMode: Int = 0 - } /** diff --git a/app/src/main/java/com/sw/platecabinet/utils/ListArrangementUtil.kt b/app/src/main/java/com/sw/platecabinet/utils/ListArrangementUtil.kt index 19ac573..9e82dff 100644 --- a/app/src/main/java/com/sw/platecabinet/utils/ListArrangementUtil.kt +++ b/app/src/main/java/com/sw/platecabinet/utils/ListArrangementUtil.kt @@ -18,26 +18,19 @@ object ListArrangementUtil { defaultValue: EquipmentUserInfo = EquipmentUserInfo() ): List { Timber.d("horizontalSortPageItem") - // 填充缺失的数据,确保能被 columns 整除 - val filledList = if (list.size % columns != 0) { - list + List(columns - (list.size % columns)) { defaultValue } - } else { - list - } + require(columns > 0) { "Columns must be positive" } + val filledList = list.padToMultiple(columns, defaultValue) val chunks = filledList.chunked(columns) + return (0 until columns) .windowed(2, 2, partialWindows = true) .flatMap { group -> when (group.size) { 2 -> chunks.flatMap { listOf(it[group[0]], it[group[1]]) } 1 -> chunks.flatMap { - listOf( - it[group[0]], - EquipmentUserInfo(equipmentBoxCode = null) - ) + listOf(it[group[0]], EquipmentUserInfo(equipmentBoxCode = null)) }.dropLast(1) - else -> error("Unexpected group size") } } @@ -48,18 +41,12 @@ object ListArrangementUtil { */ fun verticalSortItem(list: List): List { Timber.d("verticalSortItem") - val users = if (list.size % 2 != 0) { - Timber.d("列表长度必须是偶数") - list + EquipmentUserInfo() - } else { - list - } - + val users = list.padToEvenSize() val half = users.size / 2 - val firstHalf = users.take(half) - val secondHalf = users.drop(half) - return firstHalf.zip(secondHalf) { a, b -> listOf(a, b) }.flatten() + return users.take(half) + .zip(users.drop(half)) { a, b -> listOf(a, b) } + .flatten() } /** @@ -70,12 +57,32 @@ object ListArrangementUtil { cols: Int ): List { Timber.d("convertToColumnFirst") + require(cols > 0) { "Columns must be positive" } + val rows = ceil(original.size.toDouble() / cols).toInt() return List(original.size) { pos -> - val row = pos % rows - val col = pos / rows - val originalPos = col + row * cols - original[originalPos] + original.getOrNull(pos % rows * cols + pos / rows) ?: EquipmentUserInfo() + } + } + + // 提取的扩展函数 + private fun List.padToMultiple( + multiple: Int, + defaultValue: EquipmentUserInfo + ): List { + return if (size % multiple != 0) { + this + List(multiple - (size % multiple)) { defaultValue } + } else { + this + } + } + + private fun List.padToEvenSize(): List { + return if (size % 2 != 0) { + Timber.d("列表长度必须是偶数") + this + EquipmentUserInfo() + } else { + this } } } \ No newline at end of file