Kotlin:从列表中返回随机元素

Hfr*_*rav 3 random kotlin

我在从几个列表(字符串和整数)中获取和返回随机元素时遇到了一些麻烦。问题是每次我运行代码时,这些值确实是随机的。但是对于相同方法的连续调用,值是相似的。

我已将代码缩减为重要部分,因此此处的示例中不包含类定义、导入等。

lonnsinntekter2 += TestsakDataBuilder.createInntekt(
    fnr = fnr, arbeid = TestsakDataBuilder.createArbeid()

fun createArbeid(arbeidsgiver: String = randomArbeidsgiver, stillingsprosent: Int = 
                               randomStillingsprosent,
                               erStillingFast: Boolean = HelperUtils.getRandomBoolean()): Arbeid {
    return Arbeid.builder()
        .arbeidsgiver(arbeidsgiver)
        .stillingsprosent(stillingsprosent)
        .erStillingFast(erStillingFast)
        .build()
    }   
}
Run Code Online (Sandbox Code Playgroud)

从上面的代码中调用的randomArbeidsgiverrandomStillingsprosent方法:

val randomArbeidsgiver = listOf("Snusk & Fransen AS", "Humbug Elektro AS", "Hummer & Kanari ANS",
        "REMA1000", "Meny", "Gaukern på hjørnet", "Equinor", "Ad Libris").random()

val randomStillingsprosent = listOf(50, 60, 70, 80, 90).random()
Run Code Online (Sandbox Code Playgroud)

我在这里做错了什么?是列表的 .random() 函数在编译时选择值,而不是每次调用时选择值吗?

Wil*_*zel 5

random()仅在您的每个变量和程序启动时调用一次。之后,您可以使用已分配的值。randomArbeidsgiverrandomStillingsprosent

如果您想在每次createArbeid调用时检索新的随机元素,您可以像这样将列表创建与随机元素检索分离:

val arbeidsgiverList = listOf("Snusk & Fransen AS", "Humbug Elektro AS", "Hummer & Kanari ANS", "REMA1000", "Meny", "Gaukern på hjørnet", "Equinor", "Ad Libris")
val stillingsprosentList = listOf(50, 60, 70, 80, 90)

fun createArbeid(
    arbeidsgiver: String = arbeidsgiverList.random(), 
    stillingsprosent: Int = stillingsprosentList.random(), 
    ...
): Arbeid { /* ... */}
Run Code Online (Sandbox Code Playgroud)