You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin实现:为列表每行填充1-90范围内的5个不重复数字

问题描述

我有一个包含3行的列表:

private val line1 = mutableListOf<Int>()
private val line2 = mutableListOf<Int>()
private val line3 = mutableListOf<Int>()
val card = mutableListOf(line1, line2, line3)

需要为每行填充1到90之间的5个不重复数字,该如何实现?

我尝试用Flow实现,但每行的数字都完全相同,没法正常工作。我只需要每行有5个不重复的数字就行。原有尝试代码如下:

class Card {

    private val line1 = mutableListOf<Int>()
    private val line2 = mutableListOf<Int>()
    private val line3 = mutableListOf<Int>()

    val card = mutableListOf(line1, line2, line3)

    init {
        runBlocking {
            launch {
                Generator.flow.collect {
                    card.forEach { line ->
                        line.add(it)
                    }
                }
            }
        }
    }
}
解决方案

问题原因

你原来的代码里,Flow每次发射一个数字时,都会把这个数字添加到所有行里,所以每行内容完全一致,不符合需求。

方法一:直接生成(无需Flow)

如果不需要依赖Flow,最简单的方式是为每行单独生成5个1-90的不重复随机数字:

class Card {
    private val line1 = generateUniqueNumbers()
    private val line2 = generateUniqueNumbers()
    private val line3 = generateUniqueNumbers()

    val card = listOf(line1, line2, line3)

    private fun generateUniqueNumbers(): List<Int> {
        // 打乱1-90的数字顺序,取前5个即为不重复随机数
        return (1..90).shuffled().take(5)
    }
}

方法二:用Flow实现(若必须用Flow)

如果一定要基于Flow实现,需要为每行单独订阅独立的数字流,而非将同一个数字批量添加到所有行:

class Card {
    private val line1 = mutableListOf<Int>()
    private val line2 = mutableListOf<Int>()
    private val line3 = mutableListOf<Int>()

    val card = mutableListOf(line1, line2, line3)

    init {
        runBlocking {
            // 为每行单独启动收集任务,限定只收集5个数字
            launch {
                generateNumberFlow().take(5).collect { line1.add(it) }
            }
            launch {
                generateNumberFlow().take(5).collect { line2.add(it) }
            }
            launch {
                generateNumberFlow().take(5).collect { line3.add(it) }
            }
        }
    }

    // 生成1-90的不重复随机数字流
    private fun generateNumberFlow(): Flow<Int> {
        return flow {
            (1..90).shuffled().forEach { emit(it) }
        }
    }
}

内容的提问来源于stack exchange,提问作者Den

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 02:00:25