我在排除在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]
答案 0 :(得分:1)
真的没什么了不起的。您只需迭代所有值条目并在其上调用某种排序算法。例如,Collections#sort
(documentation)方法提供的那个。该方法对内联进行排序,因此您不必重新添加值或任何内容,只需调用该方法,您的值条目将被排序:
实现这一目标的最短代码可能是
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
。