Kotlin: возврат случайных элементов из списка - PullRequest
3 голосов
/ 11 февраля 2020

У меня проблемы с получением и возвратом случайных элементов из пары списков (String и int). Проблема в том, что каждый раз, когда я запускаю код, значения действительно случайны. Но для последовательных вызовов одного и того же метода (ов) значения одинаковы.

Я сократил свой код до важных частей, поэтому нет определений классов, импортирует и так далее c. включенный в пример здесь.

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()
    }   
}

Методы randomArbeidsgiver и randomStillingsprosent , вызываемые из приведенного выше кода:

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()

Что я здесь делаешь неправильно? Это то, что функция .random () списка выбирает значение во время компиляции, а не для каждого вызова?

Ответы [ 2 ]

5 голосов
/ 11 февраля 2020

random() вызывается только один раз для каждой из ваших переменных randomArbeidsgiver и randomStillingsprosent при запуске программы. После этого вы работаете со значением, которое было присвоено.

Если вы хотите получать новые случайные элементы каждый раз, когда вызывается 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 { /* ... */}
2 голосов
/ 11 февраля 2020

В настоящее время randomArbeidsgiver и randomStillingsprosent являются NOT методами. Если вы хотите sh создать их методы, просто добавьте фигурные скобки вокруг них.

Однако при каждом вызове метода список будет инициализироваться.

Пример:

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() }

fun test(item1: String = randomArbeidsgiver(), item2: Int = randomStillingsprosent()) {
    println("Item 1: $item1")
    println("Item 2: $item2")
}

Попробуйте пример: https://pl.kotl.in/N-7Lkw-ng

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...