繁体   English   中英

如何在HashMap中对数组列表进行排序 <Integer, ArrayList<String> &gt;

[英]how to sort the array list in HashMap<Integer, ArrayList<String>>

我在整理在哈希图或树图内部找到的ArrayList时遇到问题。 目的是让程序打印出密钥以及已排序的arraylist。 我尝试使用收藏集,但是没有用,欢迎任何帮助:)

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]

确实没有太多。 您只需迭代所有值条目并对其调用某种排序算法。 例如, Collections#sortdocument )方法提供的一种。 该方法对内联进行排序,因此您不必重新添加值或任何内容,只需调用该方法即可对您的值条目进行排序:

可能最短的代码来实现这一点是

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

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


如果您更熟悉常规循环:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM