![](/img/trans.png)
[英]How to give different array list for each key when implementing HashMap<Integer, ArrayList<String>>
[英]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#sort
( document )方法提供的一种。 该方法对内联进行排序,因此您不必重新添加值或任何内容,只需调用该方法即可对您的值条目进行排序:
可能最短的代码来实现这一点是
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.