如何在java中使用特定列对csv文件中的记录进行排序
我正在从csv文件中读取学生数据,并尝试使用marks列按降序对数据进行排序,并尝试获取前n名和后n名学生记录。我面临的问题是如何按特定列对完整的csv文件进行排序,将排序后的数据存储在何处,以及如何检索前n名学生的记录 我尝试使用下面的代码对marks列进行排序。通过使用它,我可以对该列进行排序,但我无法获得名称、卷号和电话号码等剩余字段如何在java中使用特定列对csv文件中的记录进行排序,java,Java,我正在从csv文件中读取学生数据,并尝试使用marks列按降序对数据进行排序,并尝试获取前n名和后n名学生记录。我面临的问题是如何按特定列对完整的csv文件进行排序,将排序后的数据存储在何处,以及如何检索前n名学生的记录 我尝试使用下面的代码对marks列进行排序。通过使用它,我可以对该列进行排序,但我无法获得名称、卷号和电话号码等剩余字段 String splitBy = ","; String line = ""; ArrayList<String> marks = new Ar
String splitBy = ",";
String line = "";
ArrayList<String> marks = new ArrayList<>();
BufferedReader br = new BufferedReader(new FileReader("Student_Records.csv"));
while((line = br.readLine()) != null) {
String[] b = line.split(splitBy);
//System.out.println(b[5]+" && "+b[6]);
marks.add(b[7]);
}
List<Integer> newList = marks.stream()
.map(s -> Integer.parseInt(s))
.collect(Collectors.toList());
Collections.sort(newList, Collections.reverseOrder());
for(int i : newList)
System.out.println(i);
String splitBy=“,”;
字符串行=”;
ArrayList标记=新的ArrayList();
BufferedReader br=新的BufferedReader(新文件阅读器(“Student_Records.csv”);
而((line=br.readLine())!=null){
字符串[]b=行。拆分(拆分方式);
//System.out.println(b[5]+“&&&+b[6]);
添加(b[7]);
}
List newList=marks.stream()
.map->Integer.parseInt
.collect(Collectors.toList());
Collections.sort(newList,Collections.reverseOrder());
for(int i:newList)
系统输出打印LN(i);
您只在创建的列表中存储标记。您还需要存储所需的其他数据
您可以创建一个新类,即:StudentRecord
,而不是使用List
并将其转换为List
。该类可以为csv中的值设置字段,例如标记字段、名称等。。然后您可以将它们放入列表中
如果这样做,您的问题将变成“如何根据对象的某个字段对对象列表进行排序?”您可以使用或接口来决定如何对其进行排序
要查看如何使用这两种接口的许多示例,您可以在谷歌上搜索“java comparator示例”或“java comparable示例”。您只在创建的列表中存储标记。您还需要存储所需的其他数据
您可以创建一个新类,即:StudentRecord
,而不是使用List
并将其转换为List
。该类可以为csv中的值设置字段,例如标记字段、名称等。。然后您可以将它们放入列表中
如果这样做,您的问题将变成“如何根据对象的某个字段对对象列表进行排序?”您可以使用或接口来决定如何对其进行排序
要查看如何使用这两种接口的许多示例,您可以在谷歌上搜索“java comparator示例”或“java comparable示例”。尝试一下,这至少应该给您一个开始(我没有csv来测试它):
//将文件加载到列表中
字符串splitBy=“,”;
字符串行=”;
列表标记=新的ArrayList();
BufferedReader br=新的BufferedReader(新文件阅读器(“Student_Records.csv”);
而((line=br.readLine())!=null){
字符串[]b=行。拆分(拆分方式);
//System.out.println(b[5]+“&&&+b[6]);
marks.add(Arrays.asList(b));
}
//创建比较器
比较器comp=新比较器(){
公共整数比较(列表标记行1、列表标记行2){
返回Integer.valueOf(marksLine1.get(7)).compareTo(Integer.valueOf(marksLine2.get(7));//将7更改为要排序的列索引(我假设7是您的marks列)
}
};
//使用比较器进行排序
集合。排序(标记、组件);
//打印已排序的csv
用于(列表i:标记)
System.out.println(i.toString());
//关闭BufferedReader
br.close();
我使用列表而不是ArrayList,这样它可以保存整个csv数据。ArrayList只能容纳一行,除非将其包装到另一个列表中。基本上,第一个列表水平保存数据,然后需要包装第二个列表以垂直保存数据
此外,我还创建了一个自定义比较器,您可以在其中进行编辑,根据需要对其进行排序。如果您尝试此操作,您可能还需要抛出或捕获IOException。尝试此操作,这至少会给您一个开始(我没有csv来测试它):
//将文件加载到列表中
字符串splitBy=“,”;
字符串行=”;
列表标记=新的ArrayList();
BufferedReader br=新的BufferedReader(新文件阅读器(“Student_Records.csv”);
而((line=br.readLine())!=null){
字符串[]b=行。拆分(拆分方式);
//System.out.println(b[5]+“&&&+b[6]);
marks.add(Arrays.asList(b));
}
//创建比较器
比较器comp=新比较器(){
公共整数比较(列表标记行1、列表标记行2){
返回Integer.valueOf(marksLine1.get(7)).compareTo(Integer.valueOf(marksLine2.get(7));//将7更改为要排序的列索引(我假设7是您的marks列)
}
};
//使用比较器进行排序
集合。排序(标记、组件);
//打印已排序的csv
用于(列表i:标记)
System.out.println(i.toString());
//关闭BufferedReader
br.close();
我使用列表而不是ArrayList,这样它可以保存整个csv数据。ArrayList只能容纳一行,除非将其包装到另一个列表中。基本上,第一个列表水平保存数据,然后需要包装第二个列表以垂直保存数据
此外,我还创建了一个自定义比较器,您可以在其中进行编辑,根据需要对其进行排序。如果您尝试此操作,您可能还需要抛出或捕获IOException。请发布您当前尝试解决此问题的相关部分以及您在该尝试中遇到的具体问题。请发布您当前尝试解决此问题的相关部分以及具体问题您正在尝试此操作。@Geethaabjul请将问题标记为已完成,谢谢。@Geethaabjul请将问题标记为已完成,谢谢。
//Loading file into a List
String splitBy = ",";
String line="";
List<List<String>> marks = new ArrayList<>();
BufferedReader br = new BufferedReader(new FileReader("Student_Records.csv"));
while((line = br.readLine()) != null){
String[] b = line.split(splitBy);
//System.out.println(b[5]+" && "+b[6]);
marks.add(Arrays.asList(b));
}
//Creating the comparator
Comparator<List<String>> comp = new Comparator<List<String>>() {
public int compare(List<String> marksLine1, List<String> marksLine2) {
return Integer.valueOf(marksLine1.get(7)).compareTo(Integer.valueOf(marksLine2.get(7))); //Change the 7s to the column index you want to sort by (I assume 7 is your marks column)
}
};
//Sorting using the comparator
Collections.sort(marks, comp);
//Printing the sorted csv
for(List<String> i : marks)
System.out.println(i.toString());
//Close the BufferedReader
br.close();