当前位置: 首页 > 知识库问答 >
问题:

如何在Java8 Stream中定义自定义排序比较器来比较键和值

谢泽语
2023-03-14
Map<Integer, Integer> ranks = new HashMap<Integer, Integer>();
input [1=6 , 5=13 , 2= 11 , 4 = 14 ]
result [4,5,2,1]
input [2=6 , 5=13 , 1= 11 , 3=13 ,9 = 22 ] result [9,3,5,1,2]

下面的代码片段适用于条件1,但不适用于条件2。

List<Integer> ranksList = ranks.entrySet().stream()
    .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
    .map(Map.Entry::getKey)
    .limit(k)
    .collect(Collectors.toList());

共有1个答案

汲品
2023-03-14

您正在寻找自定义比较器,如下所示:

.sorted((o1, o2) -> o2.getValue().compareTo(o1.getValue()) == 0 ?
        o1.getKey().compareTo(o2.getKey()) : o2.getValue().compareTo(o1.getValue()))

从理论上讲,

>

  • 按降序首先比较这些值O2.getValue().compareto(O1.getValue())

  •  类似资料:
    • 问题内容: 我想为汽车清单开发一个排序演示。我正在使用数据表显示汽车列表。现在实际上我想按汽车颜色对列表进行排序。这里不是按字母顺序排序的。我想使用我的自定义排序顺序,例如先是红色汽车,然后是蓝色,等等。 为此,我尝试使用,但它只允许按字母顺序排序。 因此,任何人都可以指导我实现使用该技术的方法,以便使排序变得更快。 问题答案: 我建议你为汽车颜色创建一个枚举,而不要使用字符串,并且枚举的自然顺序

    • 在我的PriorityQueue中,我有两种类型的客户,即VIP和常规客户。我想先为贵宾服务,再为常客服务。 如果CustomerID<100,则视为VIP。 如果客户是VIP,他会排在队列中VIP部分的最后 更新:我不想排序任何其他列除了VIP。我不想添加“日期”,因为它感觉像是一个黑客,而不是理解Java是如何工作的。

    • 如何使用Comparator对对象的ArrayList进行正确排序,然后将排序后的数组传递给自定义数组适配器? 我试过这样做: ArrayList的内容类: 比较器: 在OnCreate中设置适配器: ...因为我使用的是定制的ArrayAdapter,就像: 我需要如何修改此适配器以使其与其他适配器一起工作? 谢谢你的帮助。

    • 在将此标记为副本之前,请阅读到底部 我希望能够按照字母顺序对字符串数组(或基于一个字符串值的结构片)进行排序,但要基于自定义字母表或unicode字母。 大多数时候,人们建议使用支持不同预定义语言环境/字母表的拼贴器。(请参阅此Java答案),但对于这些语言环境捆绑包中不可用的稀有语言/字母表,可以做些什么? 我想使用的语言在Golangs的归类支持和可用的语言列表中不可用,所以我需要能够定义自定

    • 本文向大家介绍Python3.x中自定义比较函数,包括了Python3.x中自定义比较函数的使用技巧和注意事项,需要的朋友参考一下 在Python3.x的世界里,cmp函数没有了。那么sorted,min,max等需要比较函数作为参数的函数该如何用呢? 以min函数的定义为例,有两种重载形式: 单参数(一个迭代器): 多参数(多个待比较内容): 本文主要讨论key=func参数的使用 。举例说明吧

    • 我创建了一个自定义比较器,可以按降序对获胜数进行排序,但我不确定它是如何工作的,有人能解释一下这是如何按降序排序的吗?