从集合中获取随机元素

新手上路,请多包涵

我有一个 Collection<Obj> 我如何从中得到一个随机的 Obj

我检查了 文档,似乎没有办法,因为迭代器是访问集合的唯一方法。我是否必须遍历它才能获得随机对象!?

原文由 Secret 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 589
2 个回答

最有效的方法是只迭代到你需要的程度。

 public static <T> T random(Collection<T> coll) {
    int num = (int) (Math.random() * coll.size());
    for(T t: coll) if (--num < 0) return t;
    throw new AssertionError();
}

原文由 Peter Lawrey 发布,翻译遵循 CC BY-SA 3.0 许可协议

使用 Lambdas,您可以非常快速地完成此操作并处理 Collection 为空的情况。

 public static <E> Optional<E> getRandom (Collection<E> e) {

    return e.stream()
            .skip((int) (e.size() * Math.random()))
            .findFirst();
}

原文由 Witold Kaczurba 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题