从 Java 的列表中选择多个随机元素

2022-09-01 16:24:35

所以说我有

List<String> teamList = new LinkedList<String>()
teamList.add("team1");
teamList.add("team2");
teamList.add("team3");
teamList.add("team4");
teamList.add("team5");
teamList.add("team6");

有没有一种简单的挑选方法...以随机方式说此列表中的6个元素中有3个,而无需两次(或更多次)选择相同的元素?


答案 1

试试这个:

public static List<String> pickNRandom(List<String> lst, int n) {
    List<String> copy = new ArrayList<String>(lst);
    Collections.shuffle(copy);
    return n > copy.size() ? copy.subList(0, copy.size()) : copy.subList(0, n);
}

我假设输入列表中没有重复的元素,我也采取了洗牌副本的预防措施,以使原始列表不受干扰。像这样使用它:

List<String> randomPicks = pickNRandom(teamList, 3);

答案 2

创建一组 int,并在循环中将 0 和列表长度减去 1 之间的随机数放入其中,而集合的大小不等于所需的随机元素数。遍历集合,并选取由集合中的数字指示的元素。这样可以保持原始列表不变。


推荐