洗牌数组列表中的元素组
Shuffling groups of elements in an arraylist
我正在开发一个组生成器,目前我正在从这个 txt 文件制作一个 ArrayList。
因此,ArrayList 的形式为 [PedroA, Brazil, Male, 10G, Saadia...]
我想一次打乱 4 个元素,以随机化这个数组列表。
我将信息存储在
ArrayList<String> studentInfo = info.readEachWord(className);
这很难做到。当然可以,但是很难。
它变得困难,因为你想做的事情很奇怪。
通常的做法是:
- 制作一个 class 表示单个条目,我们称它为
class Person
.
- 通过将每一行解析为单个
Person
实例来读取此数据,并将它们全部添加到列表中。
- 只需调用
Collections.shuffle(list);
即可洗牌。
如果我们有以上内容,我们就可以做你想做的事,然后将你的 List<Person>
转换回 List<String>
。在许多方面,这是完成您要求的任务的最简单方法,但随后您开始想知道为什么首先要以字符串列表的形式提供此数据。
enum Gender {
MALE, FEMALE, OTHER;
public static Gender parse(String in) {
switch (in.toLowerCase()) {
case "male": return MALE;
case "female": return FEMALE;
default: return OTHER;
}
}
class Person {
String name;
String location;
Gender gender;
[some type that properly represents whatever 10G and 10W means];
public static Person readLine(String line) {
String[] parts = line.split("\s+", 4);
Person p = new Person();
p.name = parts[0];
p.location = parts[1];
p.gender = Gender.parse(parts[2]);
...;
return p;
}
}
你明白了。
我正在开发一个组生成器,目前我正在从这个 txt 文件制作一个 ArrayList。
因此,ArrayList 的形式为 [PedroA, Brazil, Male, 10G, Saadia...]
我想一次打乱 4 个元素,以随机化这个数组列表。
我将信息存储在
ArrayList<String> studentInfo = info.readEachWord(className);
这很难做到。当然可以,但是很难。
它变得困难,因为你想做的事情很奇怪。
通常的做法是:
- 制作一个 class 表示单个条目,我们称它为
class Person
. - 通过将每一行解析为单个
Person
实例来读取此数据,并将它们全部添加到列表中。 - 只需调用
Collections.shuffle(list);
即可洗牌。
如果我们有以上内容,我们就可以做你想做的事,然后将你的 List<Person>
转换回 List<String>
。在许多方面,这是完成您要求的任务的最简单方法,但随后您开始想知道为什么首先要以字符串列表的形式提供此数据。
enum Gender {
MALE, FEMALE, OTHER;
public static Gender parse(String in) {
switch (in.toLowerCase()) {
case "male": return MALE;
case "female": return FEMALE;
default: return OTHER;
}
}
class Person {
String name;
String location;
Gender gender;
[some type that properly represents whatever 10G and 10W means];
public static Person readLine(String line) {
String[] parts = line.split("\s+", 4);
Person p = new Person();
p.name = parts[0];
p.location = parts[1];
p.gender = Gender.parse(parts[2]);
...;
return p;
}
}
你明白了。