Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从txt文件生成组并基于首选项生成组_Java_Sorting_Grouping_Preferences_Discriminator - Fatal编程技术网

Java 从txt文件生成组并基于首选项生成组

Java 从txt文件生成组并基于首选项生成组,java,sorting,grouping,preferences,discriminator,Java,Sorting,Grouping,Preferences,Discriminator,我正在设计一个群组生成器,它接受诸如“混合性别”、“混合国籍”之类的偏好。。。我在一个arraylist中列出了一个学生姓名列表,后面是国籍和基因集。根据用户输入生成组的最简单方法是什么,即每个组由来自不同国籍或性别均衡的人组成 public ArrayList readEachWord(字符串类名称) { ArrayList readword=新建ArrayList(); 扫描仪sc2=空; 试一试{ sc2=新扫描仪(新文件(className+“.txt”); }catch(filenot

我正在设计一个群组生成器,它接受诸如“混合性别”、“混合国籍”之类的偏好。。。我在一个arraylist中列出了一个学生姓名列表,后面是国籍和基因集。根据用户输入生成组的最简单方法是什么,即每个组由来自不同国籍或性别均衡的人组成

public ArrayList readEachWord(字符串类名称)
{
ArrayList readword=新建ArrayList();
扫描仪sc2=空;
试一试{
sc2=新扫描仪(新文件(className+“.txt”);
}catch(filenotfounde异常){
System.out.println(“错误,未找到文件”);
e、 printStackTrace();
}
while(sc2.hasNextLine()){
Scanner s2=新的扫描仪(sc2.nextLine());
while(s2.hasNext()){
字符串s=s2.next();
readword.add(s);
}
}
返回readword;
}
我用它来读一个文本文件,在每一行上,我都有每个学生的姓名、国籍和性别。我把它们放到一个ArrayList中,现在正试图找出如何根据用户所需的组号平均分配它们

我正在使用一个txt文件来存储所有信息,因为这个组生成器是为我的学校定制的。

您可以使用该方法

导入java.util.array;
导入java.util.List;
导入java.util.Map;
导入java.util.stream.collector;
课堂擦伤{
公共静态void main(字符串[]args){
String student1=“梅西美国女性”;
String student2=“亚戈巴西男”;
String student3=“汤姆美国男性”;
List students=array.asList(student1、student2、student3);
系统输出打印LN(按性别分组(学生));
System.out.println(groupby国籍(学生));
}
私人静态地图GroupByNational(列出学生){
返回students.stream().map->mapToStudent.collect(Collectors.groupingBy(Student::getnational));
}
私人静态地图按性别分组(列出学生){
返回students.stream().map->mapToStudent.collect(Collectors.groupingBy(Student::getGender));
}
私有静态学生映射到学生(字符串s){
字符串[]ss=s.split(“”);
学生=新生();
student.setName(ss[0]);
学生国籍(ss[1]);
学生性别(ss[2]);
留学生;
}
私立静态班学生{
字符串名;
弦民族;
字符串性别;
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公共字符串getNational(){
返回国籍;
}
公共国籍(字符串国籍){
国籍=国籍;
}
公共字符串getGender(){
返回性别;
}
公共无效设置性别(字符串性别){
这个。性别=性别;
}
@凌驾
公共字符串toString(){
返回“学生{”+
“name=”+name+“\”+
“,国籍=”+国籍+“\”+
“,性别=”+性别+“\”+
'}';
}
}
}

首先,最好将while循环放在try块中,因为如果找不到文件,您不想到达那里

其次,您不需要创建一个新的Scanner实例来读取每一行。您只需逐字读取文件:

while (sc2.hasNext())
    readword.add(sc2.next());
要根据学生的国籍对他们进行分组,您可以这样做:

String nationality = [UserInput] ;
List<String> group = new ArrayList<>();
for (int i = 0; i < readword.size(); i++)
    if (readword.get(i + 1).equals(nationality)
        group.add(readword.get(i));
字符串国籍=[UserInput];
列表组=新的ArrayList();
for(int i=0;i
请同时添加示例输出也许此答案可以帮助您:
String nationality = [UserInput] ;
List<String> group = new ArrayList<>();
for (int i = 0; i < readword.size(); i++)
    if (readword.get(i + 1).equals(nationality)
        group.add(readword.get(i));