Java 按键按升序对地图排序

Java 按键按升序对地图排序,java,sorting,hashmap,map-function,Java,Sorting,Hashmap,Map Function,我正在尝试根据键按升序对地图进行排序。给定地图: Map<Integer, String> map = new LinkedHashMap<Integer, String>(); map.put(5, "five"); map.put(1, "one"); map.put(3, "three"); map.put(0, "zero"); 为此,我编写了以下代码: public <K, V extends Comparable<? super V&g

我正在尝试根据键按升序对地图进行排序。给定
地图

Map<Integer, String> map = new LinkedHashMap<Integer, String>();

map.put(5, "five");
map.put(1, "one");
map.put(3, "three");
map.put(0, "zero");
为此,我编写了以下代码:

    public <K, V extends Comparable<? super V>> Map<K, V> sortByKeyInAscendingOrder(Map<K, V> map)
{
    List<Entry<K, V>> list = new ArrayList<>(map.entrySet());
    list.sort(Entry.comparingByKey());

    Map<K, V> result = new LinkedHashMap<>();
    for (Entry<K, V> entry : list) {
        result.put(entry.getKey(), entry.getValue());
    }
    return result;
}
我已经编写了类似的代码(工作正常)来按值排序(将
Entry.comparingByKey()
更改为
Entry.comparingByValue()
),但由于某种原因,当我尝试按键排序时,我得到了上述错误

我怎样才能解决这个问题

感谢

要求其键
K
类型参数为
可比
,而不是(必须)其值
V


移动绑定的
?扩展可比较的您需要使
K
可比较到按它排序;而
V
上的边界是错误的(但无论如何都是不必要的)


用树形图怎么样?它使关键点按自然顺序排序:

如果需要从现有映射创建它,请使用它的参数化构造函数:

TreeMap<Integer,String> treeMap = new TreeMap<>(map);
TreeMap TreeMap=newtreemap(map);

因为使用HashMap不能保证顺序,LinkedHashMap保持插入顺序。要按键对映射进行排序,请使用TreeMap。

您也可以尝试使用Java8流

Map<Integer, String> map = new LinkedHashMap<Integer, String>();

    map.put(5, "five");
    map.put(1, "one");
    map.put(3, "three");
    map.put(0, "zero");

    map = map.entrySet().stream().sorted(Comparator.comparing(Map.Entry::getKey))
            .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

    System.out.println(map);  //{0=zero, 1=one, 3=three, 5=five}

哇,祝你有个好答案!你是第一个回答的,所以我接受这是正确的答案。。谢谢大家!
<K, V extends Comparable<? super K>>
<K extends Comparable<? super K>, V>
V extends Comparable<? super V>
public <K extends Comparable<? super K>, V> Map<K, V> sortByKeyInAscendingOrder(Map<K, V> map)
return new LinkedHashMap<>(new TreeMap<>(map));
return map.entrySet().stream()
    .sorted(Entry.comparingKey())
    .collect(toMap(k -> k, v -> v, LinkedHashMap::new));
TreeMap<Integer,String> treeMap = new TreeMap<>(map);
Map<Integer, String> map = new LinkedHashMap<Integer, String>();

    map.put(5, "five");
    map.put(1, "one");
    map.put(3, "three");
    map.put(0, "zero");

    map = map.entrySet().stream().sorted(Comparator.comparing(Map.Entry::getKey))
            .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

    System.out.println(map);  //{0=zero, 1=one, 3=three, 5=five}
map.forEach((k,v)->System.out.println(k+"  "+v));