获得解决方案..使用linkedHashMap并能够将排序的键值存储在数组中。 Here是代码的链接。
我创建了一个hashmap,然后使用this code“按值排序”地图中的元素。 代码工作,我能够在屏幕上显示按值排序的键值对。
现在我想将密钥(来自已排序的元素)存储在String[]
中。 <{1}}没有帮助,因为已经退出的HashMap没有排序。
有人可以建议一种方法吗?
进一步澄清情况 - 假设我有关键值对,如(a,1)(b,23)(c,7) 通过使用上面的链接,我能够得到(a,1)(c,7)(b,23)作为输出。我想将{a,c,b}存储为字符串数组。 我希望现在问题很清楚。
答案 0 :(得分:1)
重复使用此代码,您只需使用
List keys = sortByValue(m);
String[] keyArray = keys.toArray(new String[keys.size()]);
使用泛型会使这更好。我也会按Map.Entry(来自entrySet())排序,这样会更快更简单。
答案 1 :(得分:0)
我会使用Google Collection:
Map<String, String> map = new HashMap<String, String>( );
map.put("ABC1", "VALUE1");
map.put("ABC7", "VALUE1");
map.put("ABC2", "VALUE2");
map.put("ABC3", "VALUE1");
Multimap multimap = TreeMultimap.create();
for(Map.Entry<String, String> entry: map.entrySet() ) {
multimap.put( entry.getValue(), entry.getKey() );
}
System.out.println( Arrays.toString( multimap.values().toArray() ));
答案 2 :(得分:0)
对我的键进行排序很简单,请使用TreeMap
。
TreepMap sortedMap = new TreeMap(someHashMap);
String[] sortedKeys = sortedMap.keySet().toArray();
答案 3 :(得分:0)
该代码实际上并没有对HashMap进行排序 - 它只是返回键,按其值排序:
所以你需要的只是:
Object[] key_array = sortByValue(m).toArray();
答案 4 :(得分:0)
我要去像
这样的东西private static String[] keysSortedByValue(final Map<String, String> m) {
final String[] result = m.keySet().toArray(new String[m.size()]);
Arrays.sort(result, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
final String v1 = m.get(o1);
final String v2 = m.get(o2);
if (v1==v2) return 0;
if (v1==null) return -1;
if (v2==null) return +1;
return v1.compareTo(v2);
}
});
return result;
}
或使用Map.Entry[]
以提高效率(避免查找)。