You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Kotlin Stream从列表中获取X个随机唯一元素?

Kotlin:从过滤后的列表获取X个随机唯一元素的简洁实现

问题描述

我目前用这段代码从字符串列表中获取单个随机元素:

string.stream().filter { f -> f.contains("_reservert_") }.toList().random()

想知道能不能用类似的链式方式获取X个随机且唯一的元素?

我已经能用下面的代码实现,但出于Kotlin的简洁性考量,希望不用临时列表和循环就能完成:

var shuffledList = list.stream().filter { f -> f.contains("somestring") }.toList().shuffled()
        
var randomList: List<String> = ArrayList()
        
for (i in 0 until ant) {
    randomList += shuffledList[i] 
}
        
return randomList

简洁实现方案

当然可以,用Kotlin标准库函数就能一步完成链式调用,完全不需要临时变量和循环:

方案1:基于Java Stream的写法

list.stream()
    .filter { it.contains("somestring") }
    .toList()
    .shuffled()
    .take(X) // X替换为你需要获取的元素数量

方案2:基于Kotlin Sequence的高效写法

如果处理的数据量较大,用Kotlin的Sequence可以避免提前把所有过滤后的元素转成列表,提升性能:

list.asSequence()
    .filter { it.contains("somestring") }
    .shuffled()
    .take(X)
    .toList()

说明

  • shuffled()会直接返回原列表的随机打乱版本,天然保证元素唯一性
  • take(X)截取打乱后的列表前X个元素,正好得到X个随机不重复的元素
  • 整个调用链完全贴合Kotlin的简洁风格,代码更易读易维护

内容的提问来源于stack exchange,提问作者kakemonsteret

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 03:30:03