在另一个arraylist中列出arraylist项目?

时间:2017-06-11 16:08:33

标签: java arraylist

我刚刚用过 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);

但是输出的方式就像是:

  
      
  1. [Oscar,Justin] 2. [Austin,Jacob,Evie] 3. [Olivia,Elizabeth] 4. [Ryan,Jade]
  2.   

有没有办法让它输出,以便它显示每个名称,如:

  
      
  1. 奥斯卡2.贾斯汀3.奥斯汀4.雅各布......
  2.   

1 个答案:

答案 0 :(得分:0)

首先,使用Map(HashMap或有序实现)可以更好地处理这些类型的“分组”问题。 您可以将成绩作为key,将学生姓名列表作为值。与嵌套的ArrayList相比,这将成为处理集合数据的更好,更简单的方法。

关于你的问题,

  

有没有办法让它输出,以便它单独显示每个名称

没有。这些是单独的ArrayLists。您需要明确地将它们一起添加/显示。

此外,我建议您在Java 8中使用groupingBy Streams函数。这将非常适合您的用例。

使用Streams,您可以选择同时显示所有项目,或者按等级对其进行分组,并根据所选的crteria(等级)进行显示。

请参阅此答案:https://stackoverflow.com/a/30202075/599851