/**
* Returns a random element.
*/
fun <E> List<E>.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 <E> List<E>.random(random: java.util.Random): E? = if (size > 0) get(random.nextInt(size)) else null
var suliTraffic = ArrayList<SuliTraffic>()
var randomsuliTraffic = ArrayList<SuliTraffic>()
// I have add some data to my Array List
randomsuliTraffic.add(new)
// Here i shuffle all the information i have wich is over 400 object
randomsuliTraffic.shuffle()
// now you can just simply get 25 item from this randomsuliTraffic like this
for (i in randomsuliTraffic.take(25)){
suliTraffic.add(i)
}
6条答案
按热度按时间1yjd4xko1#
Kotlin1.3及以上版本:
**Kotlin1.3现在可用于多平台随机数生成器!**您可以这样使用它:
Try it online!
或者你的情况
Try it online!
Kotlin1.2
从Kotlin1.2开始,我们有了
Iterable.shuffled()
,这个方法可以帮助你使用List.take()
来提取你想要的元素数量(在这个例子中只有一个)。这个方法没有1.2之前的方法优化,但是它可以在多平台环境下工作。根据你的环境使用你需要的方法。
在Kotlin1.2之前
在Kotlin1.2之前,没有在多平台上下文中生成随机数的解决方案,最简单的解决方案是直接调用Platform Random。
JVM
在JVM上,我们使用
Random
,如果JDK〉1.6,甚至使用ThreadLocalRandom
。JS
在JS上,我们使用
Math.Random
。bd1hkmkf2#
我认为最简单、最简洁的方法是创建一个扩展函数,它返回一个随机元素,这样就可以这样使用它:
扩展功能:
感谢@Francesco注解,这里有另一个函数,它将Random示例作为随机性的来源
vsaztqbk3#
仅仅为了得到一个随机数而打乱整个列表是对性能的浪费。
使用Kotin 1.3中引入的
random()
代替对于您的特殊用例,首先过滤列表并从剩余项中选择一个随机数是有意义的。
dsekswqp4#
正如其他人所说的,
list.random()
现在应该可以了,但是如果你不知道列表是否为空,.random()
可能会抛出一个异常。除了将.randomOrNull()
实现为扩展函数之外,你还可以使用list.shuffled().firstOrNull()
来破解它,但是要注意,对于长列表来说,这是很慢的。.randomOrNull()
方法:oxiaedzo5#
如果你想从一个列表中得到25个随机元素,我可以这样做:
现在您可以在
suliTraffic
列表中找到25个随机元素。b4wnujal6#