我刚刚用过
ArrayList <ArrayList<String>> list = new ArrayList<ArrayList<String>>();
第一次使用这种方法,输出并不完全符合我想要的方式。
我正在尝试列出不同学生的名单,并根据他们的成绩对他们进行排序。但是,我也试图找到一个列表,显示所有学生,无论他们是谁年级。所以这是我正在使用的代码:
ArrayList <ArrayList<String>> allStudents = new ArrayList<ArrayList<String>>();
ArrayList <String> gradeNines = new ArrayList();
ArrayList <String> gradeTens = new ArrayList();
ArrayList <String> gradeElevens = new ArrayList();
ArrayList <String> gradeTwelves = new ArrayList();
boolean firstSelection = true;
public void grade(String a, String b, ArrayList c)
{
a = jComboBox1.getSelectedItem() + "";
if (a.equals(b))
{
studentOutput.setText("");
int x = 0;
for (int indexNum = 0; indexNum < c.size(); indexNum++)
{
x = indexNum + 1;
studentOutput.append(num + ". " + c.get(indexNum) + "\n");
}
}
}
private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt) {
String studentGrade = jComboBox1.getSelectedItem() + "";
String all = "All Grades";
String nine = "Grade Nine";
String ten = "Grade Ten";
String eleven = "Grade Eleven";
String twelve = "Grade Twelve";
if (firstSelection)
{
Collections.addAll(allStudents, gradeNines, gradeTens, gradeElevens, gradeTwelves);
Collections.addAll(gradeNines, "Oscar", "Justin",....);
Collections.addAll(gradeTens, "Austin", "Jacob", "Evie"....);
Collections.addAll(gradeElevens, "Olivia", "Elizabeth"...);
Collections.addAll(gradeTwelves, "Ryan", "Jade"...);
firstSelection = false;
}
grade(studentGrade, all, allStudents);
grade(studentGrade, nine, gradeNines);
grade(studentGrade, ten, gradeTens);
grade(studentGrade, eleven, gradeElevens);
grade(studentGrade, twelve, gradeTwelves);
但是输出的方式就像是:
- [Oscar,Justin] 2. [Austin,Jacob,Evie] 3. [Olivia,Elizabeth] 4. [Ryan,Jade]
醇>
有没有办法让它输出,以便它显示每个名称,如:
- 奥斯卡2.贾斯汀3.奥斯汀4.雅各布......
醇>
答案 0 :(得分:0)
首先,使用Map
(HashMap或有序实现)可以更好地处理这些类型的“分组”问题。
您可以将成绩作为key
,将学生姓名列表作为值。与嵌套的ArrayList相比,这将成为处理集合数据的更好,更简单的方法。
关于你的问题,
有没有办法让它输出,以便它单独显示每个名称
没有。这些是单独的ArrayLists。您需要明确地将它们一起添加/显示。
此外,我建议您在Java 8中使用groupingBy
Streams
函数。这将非常适合您的用例。
使用Streams
,您可以选择同时显示所有项目,或者按等级对其进行分组,并根据所选的crteria(等级)进行显示。