Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 按值排序hashmap_Java_Hashmap - Fatal编程技术网

Java 按值排序hashmap

Java 按值排序hashmap,java,hashmap,Java,Hashmap,我想把地图分类。我有字符串作为键,整数作为值 例如: key value "1,3" 40 "1,5" 20 "2,5" 10 "2,10" 30 Output: "2,5" 10 "1,5" 20 "2,10" 30 "1,3" 40 我尝试了下面的代码,但它不工作。你能帮帮我吗 treemap = treemap = new TreeMap<String, Integer>(); while((lin

我想把地图分类。我有字符串作为键,整数作为值

例如:

key      value
"1,3"     40
"1,5"     20 
"2,5"     10
"2,10"    30


Output:
"2,5"     10
"1,5"     20
"2,10"    30
"1,3"     40
我尝试了下面的代码,但它不工作。你能帮帮我吗

 treemap = treemap = new TreeMap<String, Integer>();
while((line = br.readLine()) !=null )
        {
            int sum=0;

              sum = //something
              String keys = xCordinate + "," + yCordinate; //getting it
              treemap.put(keys, sum);

        }
        testMap(treemap );
    }

    public static void testMap(Map <String,Integer> map)
    {
        for(Integer value1 : map.values())
        {
            String keys = map.get(value1).toString(); //error in this line
            System.out.println(keys + "  " + value1);
        }
    }

使用Java,您可以按如下方式对hashmap进行排序:

public LinkedHashMap sortHashMapByValuesD(HashMap passedMap) {
   List mapKeys = new ArrayList(passedMap.keySet());
   List mapValues = new ArrayList(passedMap.values());
   Collections.sort(mapValues);
   Collections.sort(mapKeys);

   LinkedHashMap sortedMap = new LinkedHashMap();

  Iterator valueIt = mapValues.iterator();
  while (valueIt.hasNext()) {
   Object val = valueIt.next();
   Iterator keyIt = mapKeys.iterator();

   while (keyIt.hasNext()) {
       Object key = keyIt.next();
       String comp1 = passedMap.get(key).toString();
       String comp2 = val.toString();

       if (comp1.equals(comp2)){
           passedMap.remove(key);
           mapKeys.remove(key);
           sortedMap.put((String)key, (Double)val);
           break;
       }

   }

   }
  return sortedMap;
}
这只是一个开始示例,这种方法更有用,因为它对HashMap进行排序并保留重复的值。

当您调用
map.get(something)
时,
something
必须与映射的键的类型相同(
String
),但是您正在传递一个
整数

代码

public static void testMap(Map <String,Integer> map)

value1
是一个整数,因此出现异常。

什么错误?你能添加堆栈跟踪吗?@GiovanniBotta StackTrace added,你能纠正语法和格式吗?(Integer value1:map.)的行
错误,第一行没有意义,并且您的花括号不匹配。另外,您能否更清楚地说明您正在尝试执行的操作?如何对地图进行排序?你能给出一个简单的输入/预期输出的例子吗?@GiovanniBotta编辑这个答案有误导性。他为什么要把int转换成string?你知道他想干什么吗?在给出解决方案之前,请让我们先把问题做得更好。我希望我的答案能回答您的疑问,不要指望有人能帮您解决问题。仅供参考:这种行为并不适用于所有map实现。HashMap返回null。Treemap(本例)ClassCastException,这是因为排序映射实现的性质。键必须强制转换为正确的类型,因为映射使用键的自然顺序来检索值。
public static void testMap(Map <String,Integer> map)
String keys = map.get(value1).toString(); //error in this line
                        --