我有一个带有键字符串的Map和值String以及一个字符串列表。我想根据列表中存在的值的顺序使用键对Map进行排序。
package da.fa;
public class MapSorted {
public static void main(String[] args) {
List<String> efgh = new ArrayList<String>();
efgh.add("ccc");
efgh.add("aaa");
efgh.add("ddd");
efgh.add("aaa");
Map<String, String> abcd = new HashMap<String, String>();
abcd.put("aaa", "1111");
abcd.put("bbb", "1111");
abcd.put("ccc", "1111");
abcd.put("ddd", "1111");
abcd.put("eee", "1111");
}
}
在此,abcd应按efgh列表中的值的顺序排序。
答案 0 :(得分:1)
HashMaps是不可排序的,而是使用TreeMap:
public static void main(String[] args) {
// define the needed keys
List<String> neededKeys = new ArrayList<String>();
neededKeys.add("ccc");
neededKeys.add("aaa");
neededKeys.add("ddd");
neededKeys.add("aaa");
// build a simple hashmap (unsorted)
Map<String, String> unsortedMap = new HashMap<String, String>();
unsortedMap.put("aaa", "1111");
unsortedMap.put("bbb", "1111");
unsortedMap.put("ccc", "1111");
unsortedMap.put("ddd", "1111");
unsortedMap.put("eee", "1111");
// build a sorted TreeMap and pass only the necessary objects
TreeMap<String, String> sortedMap=new TreeMap<String, String>();
for(String key:unsortedMap.keySet()){
// copy needed keys ONLY to a new sorted map
if (neededKeys.contains(key)){
sortedMap.put(key, unsortedMap.get(key));
}
}
System.out.println(unsortedMap);
System.out.println(sortedMap);
}
答案 1 :(得分:0)
如果遵循上述帖子how to sort Map values by key in Java的建议,您应该写下这样的内容:
Comparator<Foo> comparator = new Comparator<Foo>() {
List<String> final order = .. //Pass your list here;
public int compare(String o1, Stringo2) {
int i1 = order.ingexOf(o1);
int i2 = order.indexOf(o2);
return i1 > i2 ? 1 : (i1 < i1 ? -1 : 0);
}
}
Map<String, String> map = new TreeMap<>(comparator);
map.addAll(abcd);
但你需要它做什么?如果要遍历此映射后者,可以遍历列表然后获取值。它会更快。
您应该从列表中删除重复项:
List<String> efgh = new ArrayList<String>();
...
efgh.add("aaa");
..
efgh.add("aaa");
否则此解决方案无效。