[英]sorting of HashMap in Java
我有一張地圖,里面有鍵和值
關鍵字:-案例1,案例2......案例10
值:- 一月、二月......十月
現在,當我將此地圖放入數組列表時(以便我可以對其進行排序)
for (String key : dataValueMap.keySet()) {
System.out.println(key + " " + dataValueMap.get(key));
}
ArrayList<String> keys = new ArrayList<String>(
dataValueMap.keySet());
Collections.sort(keys);
for (String counter : keys) {
System.out.println(counter); >>>>>BUT it prints like :- case 1 then case 10 then case 2, case 3, case 4 etc.
}
請幫助解決這個問題,
提前致謝
使用自定義Comparator
實現對您的集合進行排序。 這需要並比較鍵的整數,但依賴於格式 case n
例子
List<String> keys = new ArrayList<>();
keys.add("case 10");
keys.add("case 3");
keys.add("case 1");
keys.add("case 2");
Collections.sort(keys, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
s1 = s1.split(" ")[1];
s2 = s2.split(" ")[1];
return Integer.compare(Integer.parseInt(s1), Integer.parseInt(s2));
}
});
for (String key : keys) {
System.out.println(key);
}
如果您確定密鑰格式,那么您可以將其按空格拆分並將實際值與比較器進行比較,例如:
Map<String, Object> myMap =
new TreeMap<String, Object>(new Comparator<String>()
{
public int compare(String o1, String o2)
{
Integer value1 = Integer.parseInt(o1.split("\\s+")[1]);
Integer value2 = Integer.parseInt(o2.split("\\s+")[1]);
return value1.compareTo(value2);
}
});
雖然如果密鑰格式不正確它會中斷,但我們可以根據預期的行為添加處理。
那么你只需要為你的字符串版本定義一個新的自定義Comparator
,並且可以編寫任何邏輯來比較列表中的兩個字符串。
List<String> keys = new ArrayList<>();
keys.add("case 10");
keys.add("case 3");
keys.add("case 1");
keys.add("case 2");
Comparator<String> comparator = new Comparator<String>(){
@Override
public int compare(String s1, String s2) {
return Integer.compare(Integer.parseInt(s1.substring(5)), Integer.parseInt(s2.substring(5)));
}
};
Collections.sort(keys, comparator);
for (String counter : keys) {
System.out.println(counter);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.