gpt4 book ai didi

java - 从 List 中取 n 个随机元素?

转载 作者:IT老高 更新时间:2023-10-28 13:52:26 27 4
gpt4 key购买 nike

如何从 ArrayList<E> 中获取 n 个随机元素?理想情况下,我希望能够连续调用 take()方法来获取另一个 x 元素,无需替换。

最佳答案

两种主要方式。

  1. 使用Random#nextInt(int) :

    List<Foo> list = createItSomehow();
    Random random = new Random();
    Foo foo = list.get(random.nextInt(list.size()));

    但不能保证连续 n 调用返回唯一元素。

  2. 使用Collections#shuffle() :

    List<Foo> list = createItSomehow();
    Collections.shuffle(list);
    Foo foo = list.get(0);

    它使您能够通过递增的索引获取 n 个唯一元素(假设列表本身包含唯一元素)。


如果您想知道是否有 Java 8 Stream 方法;不,没有内置的。标准 API 中没有像 Comparator#randomOrder() 这样的东西(还没有?)。您可以尝试以下类似的方法,同时仍然满足严格的 Comparator 契约(Contract)(尽管分布非常糟糕):

List<Foo> list = createItSomehow();
int random = new Random().nextInt();
Foo foo = list.stream().sorted(Comparator.comparingInt(o -> System.identityHashCode(o) ^ random)).findFirst().get();

最好改用Collections#shuffle()

关于java - 从 List<E> 中取 n 个随机元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4702036/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com