如何在HashMap中对数组列表进行排序<integer,arraylist <string =“”>&gt;

时间:2018-04-12 00:38:01

标签: java sorting

我在排除在hashmap或treemap中找到的ArrayList时遇到问题。目标是让程序打印出密钥,以及排序的arraylist。我尝试使用Collections,但它没有用,欢迎任何帮助:)

public static void main(String[] args) {

    ArrayList<StudentCourse> List = new ArrayList<StudentCourse>();

    List.add(new StudentCourse(2, "MATH210"));
    List.add(new StudentCourse(2, "CS105"));
    List.add(new StudentCourse(1, "S300"));
    List.add(new StudentCourse(1, "CS200"));

    HashMap<Integer, ArrayList<String>> HMap = new HashMap<>();

    for (StudentCourse st : List) {
        if (HMap.containsKey(st.getStudentID())) {
            HMap.get(st.getStudentID()).add(st.getCourse());
        } else {
            HMap.put(st.getStudentID(), new ArrayList<>());
            HMap.get(st.getStudentID()).add(st.getCourse());
        }
    }
    Collections.sort(List);//this leads to an error.



    Map<Integer, ArrayList<String>> TrMap = new TreeMap<Integer, ArrayList<String>>(HMap);
    System.out.println(TrMap.toString());             
}

输出是这样的: {1=[S300, CS200], 2=[MATH210, CS105]}

虽然意图是将arraylist排序, 这样:

1=[cS200, S300], 2=[CS105, MATH210]

1 个答案:

答案 0 :(得分:1)

真的没什么了不起的。您只需迭代所有值条目并在其上调用某种排序算法。例如,Collections#sortdocumentation)方法提供的那个。该方法对内联进行排序,因此您不必重新添加值或任何内容,只需调用该方法,您的值条目将被排序:

实现这一目标的最短代码可能是

map.values().forEach(Collections::sort);

values方法会返回地图中所有值的SetforEach将给定方法应用于所有条目。

如果您更熟悉常规循环:

for (ArrayList<String> value : map.values()) {
    Collections.sort(value);
}

您在评论中发布的方法也适用:

for (Entry<Integer, ArrayList<String>> entry : map.entrySet()) {
    Collections.sort(entry.getValue());
}

不必要将整个Entry(带键)拉出地图,您只需要值。因此,请考虑使用map#values方法而不是map#entrySet