我有这个hashmap:
HashMap<String, ArrayList<String>> allhotels = new HashMap<>();
我想按字母顺序对每个Arraylist中的所有值进行排序。这是我目前的方法:
public void sortHotels() {
for(int i = 0; i < allhotels.size(); i++) {
Collections.sort(allhotels.values().toArray(), String.CASE_INSENSITIVE_ORDER);
}
}
我想在ArrayList中为hashmap中的每个条目排序字符串。
答案 0 :(得分:6)
您没有对地图中包含的列表进行排序。您将地图中的所有列表作为包含列表的数组获取,并尝试使用比较器对列表数组进行排序。
您想要的是对地图的每个值进行排序。因此,迭代值,并对它们进行排序:
for (List<String> list : allhotels.values()) {
Collections.sort(list, String.CASE_INSENSITIVE_ORDER);
}
答案 1 :(得分:2)
这应该这样做:
for (List<String> value : allhotels.values())
{
Collections.sort(value, String.CASE_INSENSITIVE_ORDER);
}
迭代所有值(每个值都是列表),并对列表进行排序。列表就地排序,因此排序将直接应用于地图的值。
答案 2 :(得分:0)
根据您对我的评论的回答,您需要单独对每个列表进行排序:
for(ArrayList<String> list : allhotels.values()) {
Collections.sort(list, String.CASE_INSENSITIVE_ORDER);
}
答案 3 :(得分:0)
toArray()返回包含所有元素的数组 这个系列。如果这个集合对什么做出任何保证 命令其元素由其迭代器返回,此方法必须 以相同的顺序返回元素。 返回的数组将是 &#34;安全&#34;因为此系列不会保留对它的引用。
因此allhotels.values()。toArray()的任何更改都不会反映到allhotels地图上。 HashMap的预期用途不是排序,但你仍然可以从这个主题中查看一些可能性和想法 - 可能还有答案 - here。
答案 4 :(得分:0)
如果您需要在迭代过程中获取密钥,如JB Nizet的答案评论所述,您可以按如下方式编写代码:
Iterator itr = allhotels.entrySet().iterator();
while(itr.hasNext()){
Entry<String, ArrayList<String>> hotelEntry = (Entry<String, ArrayList<String>>)itr.next();
String currentKey = hotelEntry.getKey();
Collections.sort(hotelEntry.getValue(), String.CASE_INSENSITIVE_ORDER);
}