从列表中获取n个随机元素?
如何从中取n个随机元素ArrayList<E>
?理想情况下,我希望能够连续调用该take()
方法以获取另一个x元素,而无需替换。
回答:
两种主要方式。
- 用途
Random#nextInt(int)
:List<Foo> list = createItSomehow();
Random random = new Random();
Foo foo = list.get(random.nextInt(list.size()));
但是,不能保证连续的n
调用返回唯一的元素。
- 用途
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