gpt4 book ai didi

java - 如何在java 8 Stream中定义自定义排序比较器以比较键和值

转载 作者:行者123 更新时间:2023-12-04 11:18:16 26 4
gpt4 key购买 nike

我想使用 Java 8 流对 map 进行排序并返回其键的列表。

map 签名是:

Map<Integer, Integer> ranks = new HashMap<Integer, Integer>();

数据将类似于 [ 1=6, 5=13, 2=11 ]

我必须对两个条件进行排序并返回键列表。
  • 如果键的所有值都不同,则按降序排序并返回基于列表的值,例如
    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());

    最佳答案

    声明 Comparator使用 thenComparing用于链接。

    Comparator<Map.Entry<Integer, Integer>> entryComparator
    = Map.Entry.<Integer, Integer>comparingByValue(Comparator.reverseOrder())
    .thenComparing(Map.Entry.comparingByKey());

    Map<Integer,Integer> ranks = Map.of(2, 6, 5, 13, 1, 11, 3, 13, 9, 22);

    List<Integer> ranksList= ranks.entrySet().stream()
    .sorted(entryComparator)
    .map(Map.Entry::getKey).limit(47)
    .collect(Collectors.toList());

    System.out.println(ranksList);

    输出是所需的:

    [9, 3, 5, 1, 2]



    型号规范 <Integer, Integer>comparingByValue Java 需要推断 Map.Entry.comparingByKey() 的类型.

    关于java - 如何在java 8 Stream中定义自定义排序比较器以比较键和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58612318/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com