当前位置: 首页 > 知识库问答 >
问题:

使用kotlin streams从列表中获取随机项

满才
2023-03-14

如何以简单简洁的方式从列表中获取随机项<如果我想从这个列表中得到一个偶数随机数,那么。

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

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

共有3个答案

百里朝
2023-03-14

仅仅为了得到一个随机数而洗牌整个列表是对性能的浪费。

使用Kotin 1.3中引入的<code>random()

val randomNumber = listOf(1, 6, 8).random()

对于您的特殊用例,首先过滤列表并从剩余项目中选择一个随机数是有意义的。

val randomEvenNumber = listOf(1, 2, 3, 4, 5, 6, 7, 9).filter { it % 2 == 0 }.random()
冯霖
2023-03-14

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

val random = list.random()

扩展函数:

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

感谢@Francesco comment,这是另一个将随机实例作为随机性来源的函数

/**
 * 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
咸高谊
2023-03-14

静态编程语言1.3现在可用于多平台随机数生成器!您可以这样使用它:

import kotlin.random.Random

fun main() {
    println(Random.nextBoolean())
    println(Random.nextInt())
}

在线尝试!

或者以你的情况来说

fun main() {
    val list = (1..9).filter { it % 2 == 0 }
    println(list.random())
}

在线尝试!

从静态编程语言1.2开始,我们有了Iterable.shuffled()。此方法可以帮助您使用List.take()来提取您想要的元素数量(本示例中只有一个)。

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

此方法的优化程度低于 1.2 之前的版本,但它适用于多平台上下文。根据您的上下文使用所需的那个。

在静态编程语言1.2之前,多平台上下文中不存在生成随机数的解决方案。最简单的解决方案是直接调用平台随机。

在JVM上,如果我们在JDK上,我们使用Random甚至ThreadLocalRandom

import java.util.Random

fun IntRange.random() = Random().nextInt((endInclusive + 1) - start) + start

在JS上,我们使用Math.Random

fun IntRange.random() = (Math.random() * ((endInclusive + 1) - start) + start).toInt()
 类似资料:
  • 我试图创建一个并发的数据结构,它允许一个线程轮询随机元素,而另一个线程正在写入它。 我担心的是:在极端情况下,例如,在线程A调用(在中)之后,线程B删除最后一个元素。不幸的是,随机索引恰好是最后一个元素(已被删除)的索引。因此,调用将抛出未捕获的。这是我所不期望的-调用失败,即使此列表中仍有元素。 所以我想问:我的担心是真的吗?也许我误解了(或任何其他类型的并发列表)实际上是做什么的?如果我的担心

  • 问题内容: $items = Array(523,3452,334,31,…5346); 此数组的每个项目都是一个数字。 如何获得随机物品? 问题答案: echo $items[array_rand($items)]; array_rand()

  • 问题内容: var items = Array(523,3452,334,31,…5346); 如何获得随机物品? 问题答案:

  • 问题内容: 我想向表中添加一个随机值。虽然我知道如何在一个范围内添加随机整数,但目前我对如何从列表中添加随机选择的项目感到困惑。 假设我有一个用于IM帐户的MYSQL表。我想用随机数据填充它。 该查询应该执行的操作是将联系人的姓氏添加到IM表中,并从我提供的数组中随机选择。例如,该数组将是: 因此,我想为用户添加姓氏以及数组中的随机项之一。 注意: 我知道使用PHP,Perl等编程语言完全可以做到

  • 问题内容: 我有一个生成事实的简单应用。我想合并一个生成随机事实而不是递减的函数。 我的数组看起来像这样。 问题答案: 使用随机类。该类有一个方法,(doc)和引号: 返回一个伪随机数,它从此随机数生成器的序列中提取,在0(含)和指定值(不含)之间均匀分布的int值。nextInt的一般约定是伪随机生成并返回指定范围内的一个int值。所有n个可能的int值均以(近似)相等的概率产生。 因此,您需要

  • 本文向大家介绍php获取随机数组列表的方法,包括了php获取随机数组列表的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php获取数组中随机数组的实例程序,分享给大家供大家参考。具体实现方法如下: 不用多说,直接贴代码,php中的array_rand很变态,突破了正常人的理解,非常繁琐 例1: 例2: 第一次得到的结果为: 第二次得到的结果为: 第三次得到的结果为: 希望本文所述对大