Недетерминированный вывод на консоль из операции stream () - PullRequest
0 голосов
/ 06 октября 2019

У меня странный результат из моего простого кода:

val custom_list = listOf(CUSTOM_TAG+"first", CUSTOM_TAG+"second", CUSTOM_TAG+"third")
fun randomScore(){
    val myStream = custom_list.stream()
    myStream.filter { e ->
        println(CUSTOM_TAG+"text")
        e.contains("third")
    }.forEach { e -> println(e) }
}

Иногда я получаю:

1000_text
1000_text
1000_third

и в другой раз я получаю

1000_text
1000_text
1000_text
1000_third

Может кто-томожете объяснить, почему я получаю случайный результат и как это исправить?

1 Ответ

0 голосов
/ 06 октября 2019

Этот код будет всегда печатать один и тот же результат (для CUSTOM_TAG = "1000"), и это:

1000text
1000text
1000text
1000third

Первые три строки 1000text печатаются в filter лямбда(именно от println(CUSTOM_TAG+"text")) После этого шага в журнале консоли вы увидите:

1000text
1000text
1000text

При движении вперед от всех элементов начального custom_list только CUSTOM_TAG+"third" этот фильтр проходит, что приводит кв одном потоке элементов.

Наконец, вы вызываете forEach { e -> println(e) } для него, и поскольку это один поток элементов, печатается только один 1000third, что приводит к:

1000text
1000text
1000text
1000third
...