以下方法返回从参数列表列表中获取的新 Min(n, list.size()) 随机元素列表。请记住,每次通话后都会修改列表列表。因此,每次调用都会“消耗”原始列表并从中返回 n 个随机元素:
public static <T> List<T> nextRandomN(List<T> list, int n) {
return Stream
.generate(() -> list.remove((int) (list.size() * Math.random())))
.limit(Math.min(list.size(), n))
.collect(Collectors.toList());
}
示例用法:
List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
System.out.println(nextRandomN(list, 3).toString());
System.out.println(nextRandomN(list, 3).toString());
System.out.println(nextRandomN(list, 3).toString());
System.out.println(nextRandomN(list, 3).toString());
示例输出:
[8, 2, 3]
[4, 10, 7]
[1, 5, 9]
[6]