Java 如何在HashMap中对数组列表进行排序<;整数,ArrayList<;字符串>&燃气轮机;

Java 如何在HashMap中对数组列表进行排序<;整数,ArrayList<;字符串>&燃气轮机;,java,sorting,Java,Sorting,我在整理hashmap或treemap中找到的ArrayList时遇到问题。目标是让程序打印出键以及已排序的arraylist。我尝试使用集合,但没有效果,欢迎提供任何帮助:) publicstaticvoidmain(字符串[]args){ ArrayList=新建ArrayList(); 增加(新学生课程(2,“数学210”); 增加(新学生课程(2,“CS105”); 增加(新学生课程(1,“S300”); 增加(新学生课程(1,“CS200”); HashMap HMap=新的HashM

我在整理hashmap或treemap中找到的ArrayList时遇到问题。目标是让程序打印出键以及已排序的arraylist。我尝试使用集合,但没有效果,欢迎提供任何帮助:)

publicstaticvoidmain(字符串[]args){
ArrayList=新建ArrayList();
增加(新学生课程(2,“数学210”);
增加(新学生课程(2,“CS105”);
增加(新学生课程(1,“S300”);
增加(新学生课程(1,“CS200”);
HashMap HMap=新的HashMap();
用于(学生课程列表){
if(HMap.containsKey(st.getStudentID()){
HMap.get(st.getStudentID()).add(st.getCourse());
}否则{
HMap.put(st.getStudentID(),new ArrayList());
HMap.get(st.getStudentID()).add(st.getCourse());
}
}
Collections.sort(List);//这会导致错误。
Map TrMap=新树映射(HMap);
System.out.println(TrMap.toString());
}
输出如下:
{1=[S300,CS200],2=[MATH210,CS105]}

虽然目的是对arraylist进行排序, 因此:


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

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

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

map.values().forEach(Collections::sort);
values
方法返回地图中所有值的
Set
forEach
将给定的方法应用于所有条目


如果您更熟悉常规循环:

for (ArrayList<String> value : map.values()) {
    Collections.sort(value);
}
for(ArrayList值:map.values()){
集合。排序(值);
}
您在评论中发布的方法同样有效:

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

但是没有必要将整个
条目
(带键)从映射中拉出,您只需要这些值。因此,请考虑使用<代码>映射值>代码>方法,而不是<代码>地图>登录集< /代码>。< /p>我看不到任何排序的尝试。您能显示您尝试过的代码是否无效吗?因为实际上没有太多内容,只需调用
Collections.sort(list)并已排序(创建一个)。请遵守命名约定,变量名称应始终以小写字符开头。可能您忘记了指定
比较器
对象,或在自定义元素上定义自然顺序(通过让
StudentCourse
实现
可比
)。否则,没有人知道应该如何对
StudentCourse
对象进行排序。如果没有更好的答案,您可以在48小时延迟后选择并接受它。这是一条注释,答案框应位于下方。带有蓝色按钮的大盒子,标签为“发布您的答案”。
for (Entry<Integer, ArrayList<String>> entry : map.entrySet()) {
    Collections.sort(entry.getValue());
}