下面的地图包含字符串键和字符串值。这些值是逗号分隔的字符串。Map 如何按此 String 的第四个元素排序?
所以这张地图:
key1 a,b,c,1
key2 a,b,c,4
key3 a,b,c,3
key4 a,b,c,2
变成:
key2 a,b,c,4
key3 a,b,c,3
key4 a,b,c,2
key1 a,b,c,1
这可以使用 Map 吗?
下面的地图包含字符串键和字符串值。这些值是逗号分隔的字符串。Map 如何按此 String 的第四个元素排序?
所以这张地图:
key1 a,b,c,1
key2 a,b,c,4
key3 a,b,c,3
key4 a,b,c,2
变成:
key2 a,b,c,4
key3 a,b,c,3
key4 a,b,c,2
key1 a,b,c,1
这可以使用 Map 吗?
您可以按如下方式实现 Comparator :
小心“TRICK”标签,我在这里解释了“trick”
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
public class SortedMap{
public static void main(String[] args) {
Map<String,String> inputMap = new HashMap<String,String>();
inputMap.put("key1", "a,b,c,1");
inputMap.put("key2", "a,b,c,4");
inputMap.put("key3", "a,b,c,3");
inputMap.put("key4", "a,b,c,2");
// raw input
System.out.println("Input");
for (Map.Entry entry : inputMap.entrySet()) {
System.out.println("Key: "+entry.getKey()+", value: "+entry.getValue());
}
Map<String,String> sortedMap = mySort(inputMap);
System.out.println("Output");
for (Map.Entry entry : sortedMap.entrySet()) {
System.out.println("Key: "+entry.getKey()+", value: "+entry.getValue());
}
}
private static Map mySort(Map inputMap) {
// to list
List list = new LinkedList(inputMap.entrySet());
Collections.sort(list, new Comparator() {
public int compare(Object o1, Object o2) {
String v1 = (String)((Map.Entry) (o1)).getValue();
// split by ,
String[] v1Split = v1.split(",");
// get last value
String v1Value = v1Split[v1Split.length-1];
// compact syntax
String v2Value = (((String)((Map.Entry) (o2)).getValue()).split(","))[3];
// TRICK: -1 for reverse
return v1Value.compareTo(v2Value) * -1;
}
});
// TRICK: to LinkedMap
Map sortedMap = new LinkedHashMap();
for (Iterator it = list.iterator(); it.hasNext();) {
Map.Entry entry = (Map.Entry)it.next();
sortedMap.put(entry.getKey(), entry.getValue());
}
return sortedMap;
}
}
运行后,我得到了这个输出:
Input
Key: key4, value: a,b,c,2
Key: key3, value: a,b,c,3
Key: key2, value: a,b,c,4
Key: key1, value: a,b,c,1
Output
Key: key2, value: a,b,c,4
Key: key3, value: a,b,c,3
Key: key4, value: a,b,c,2
Key: key1, value: a,b,c,1