使用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优化,但是在多平台环境下工作,并且更加灵活。