从列表中获取n个随机元素?

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

回答:

两种主要方式。

  1. 用途Random#nextInt(int)
    List<Foo> list = createItSomehow();

    Random random = new Random();

    Foo foo = list.get(random.nextInt(list.size()));

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

  1. 用途Collections#shuffle()
    List<Foo> list = createItSomehow();

    Collections.shuffle(list);

    Foo foo = list.get(0);

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


如果您想知道是否有Java 8

Stream方法;不,没有内置的。没有Comparator#randomOrder()标准API中的功能(还可以吗?)。您可以在满足严格Comparator合同的情况下尝试以下操作(尽管分发情况非常糟糕):

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()改用。

以上是 从列表中获取n个随机元素? 的全部内容, 来源链接: utcz.com/qa/397701.html

回到顶部