You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对以LinkedList<Integer>为键的LinkedHashMap进行排序?

解决LinkedHashMap按LinkedList键排序的类型错误问题

首先得明确报错的根源:Map.Entry.comparingByKey()默认要求键的类型必须实现Comparable接口,但LinkedList<Integer>本身并没有实现这个接口,编译器不知道该怎么比较两个LinkedList键的大小,这就是你看到的「类型不兼容」错误。

从你期望的输出顺序来看,是要按LinkedList里的元素依次对比排序(先比第一个元素,0 < 10 < 210,对应键的顺序就符合预期),那咱们得手动给程序指定一个比较规则。

解决方案代码

修改流排序逻辑,自定义一个Comparator来处理LinkedList<Integer>类型的键比较:

LinkedHashMap<LinkedList<Integer>, float[]> sortedMap = new LinkedHashMap<>();
hm.entrySet()
   .stream()
   .sorted(Map.Entry.comparingByKey(new Comparator<LinkedList<Integer>>() {
       @Override
       public int compare(LinkedList<Integer> o1, LinkedList<Integer> o2) {
           // 按链表元素逐个对比,匹配你期望的排序逻辑
           for (int i = 0; i < Math.min(o1.size(), o2.size()); i++) {
               int cmp = o1.get(i).compareTo(o2.get(i));
               if (cmp != 0) {
                   return cmp;
               }
           }
           // 如果前面元素都相同,再按链表长度排序
           return Integer.compare(o1.size(), o2.size());
       }
   }))
   .forEachOrdered(x -> sortedMap.put(x.getKey(), x.getValue()));
hm = sortedMap;

嫌匿名内部类啰嗦的话,用Lambda表达式简化更清爽:

LinkedHashMap<LinkedList<Integer>, float[]> sortedMap = new LinkedHashMap<>();
hm.entrySet()
   .stream()
   .sorted(Map.Entry.comparingByKey((o1, o2) -> {
       for (int i = 0; i < Math.min(o1.size(), o2.size()); i++) {
           int cmp = o1.get(i).compareTo(o2.get(i));
           if (cmp != 0) return cmp;
       }
       return Integer.compare(o1.size(), o2.size());
   }))
   .forEachOrdered(x -> sortedMap.put(x.getKey(), x.getValue()));
hm = sortedMap;

为什么这个方法能解决问题?

咱们自定义的比较器会逐个对比两个LinkedList的元素:先比第一个元素,不同就直接返回结果;如果第一个元素相同,就比第二个,以此类推。如果所有对应位置的元素都一致,再比较链表长度。这样既符合你想要的排序逻辑,又给编译器明确了键的比较规则,自然就解决了类型错误。

验证输出

运行这段代码后,输出会和你期望的完全一致:

{0, 41}, {10.3f, 50.05f, 9.9f}
{10, 7}, {0.14f, 1.2f, 85.01f}
{210, 3}, {17.0f, 4.0f, 2.1f}

内容的提问来源于stack exchange,提问作者qraqatit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 14:47:30