使用kotlin流从列表中获取一个随机项目

如何以简单明了的方式从列表中获得随机项目。
例如:如果我想从这个列表中得到一个偶数。

val list = listOf(1, 2, 3, 4, 5, 6, 7, 9).filter { it % 2 == 0 } 

注意:
我知道在java中有一些类似的解决这个问题的答案,但我认为我们可以在kotlin中有一个更简洁的方法。

我认为最简单和最简洁的方法是创建扩展函数,返回一个随机元素,所以可以这样使用:

 val random = list.random() 

扩展function:

 /** * Returns a random element. */ fun  List.random(): E? = if (size > 0) get(Random().nextInt(size)) else null 

感谢@Francesco这里的评论是另一个函数,它将Random实例作为随机源

 /** * Returns a random element using the specified [random] instance as the source of randomness. */ fun  List.random(random: java.util.Random): E? = if (size > 0) get(random.nextInt(size)) else null 

自Kotlin 1.2以来,我们有Iterable.shuffled() 。 这个方法可以帮助你使用List.take()来提取你想要的元素的数量(在这个例子中只有一个)。

 val list = (1..9).filter { it % 2 == 0 } return list.shuffled().take(1)[0] 

这种方法不如Humazed优化,但是在多平台环境下工作,并且更加灵活。