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

如何从Swift的Set中获取多个随机元素且不修改原集合

一行代码实现方案

最简洁、满足全部约束的实现写法如下(兼容Java 8及以上版本):

List<Element> randomResult = new ArrayList<>(yourElementSet).stream().unordered().sorted((o1, o2) -> ThreadLocalRandom.current().nextInt(-1, 2)).limit(10).toList();

逻辑符合要求的说明

  • 不会修改原Set:代码首先基于原Set做浅拷贝生成临时ArrayList,所有随机排序、截取操作都在临时副本上执行,原Set的内部结构、元素存储完全不受影响
  • 不需要创建新的Set引用:整个过程没有声明、实例化任何Set类型的变量,最终返回结果为List结构,完全匹配约束要求
  • 执行效率足够:流的短路特性会在取够10个随机元素后直接终止操作,不需要全量打乱所有元素

补充:如果原Set的总元素量不足10个,代码会自动返回全部元素,不会触发索引越界问题,不需要额外写边界判断逻辑。

如果你使用Java 16及以上版本,还可以用更精简的按索引抽样写法:

List<Element> randomResult = ThreadLocalRandom.current().randomIndices(yourElementSet.size()).distinct().limit(10).mapToObj(Arrays.asList(yourElementSet.toArray(new Element[0]))::get).toList();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 01:42:22