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

Java sort map(按带流的值排序)[duplicate]

米丰
2023-03-14

我见过大多数使用Stream按值对映射进行排序的例子,但大多数使用的是比我的版本稍微简单的版本,对我的情况不起作用。

有一个类似于我的例子的网站,但它的工作效果并不好,因为它由于compareTo()函数而创建了“int cannot be dereferenced”错误,因为它不是用来比较原语的。

Map<String, Person> sortedMap = sortPersonByValue(personMap);

public static Map<String, Person> sortPersonByValue(final Map<String, Person> regions) {

        return regions.entrySet()
                .stream()
                .sorted(((e1, e2) -> e1.getValue().getAge().compareTo(e2.getValue().getAge()))
                //.sorted(Comparator.comparing(e1 -> e1.getValue().getAge()))
                .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new));
}

如果有人能指出我做错了什么,我将不胜感激。谢谢

共有1个答案

端木狐若
2023-03-14

假设Age是int类型,并且您希望使用integer.compare(x,y)版本:

return regions.entrySet()
            .stream()
            .sorted((e1,e2) -> Integer.compare(e1.getValue().getAge(), e2.getValue().getAge()))
            .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new));
 类似资料:
  • 问题内容: 我有ElasticSearch 5,我想根据字段值进行排序。想象一下,具有类别(例如流派)的文档可能具有科幻,戏剧,喜剧等值,并且在进行搜索时,我想对值进行排序,以便首先出现喜剧,然后是科幻和戏剧。然后,我当然会按照其他条件在小组内订购。有人可以指出我该怎么做吗? 问题答案: 使用手动排序进行Elasticsearch排序 在可以根据字段的特定值分配顺序的情况下,这是可能的。 我已经使

  • 我不熟悉Java8,不知道如何使用流及其排序方法。如果我有下面的映射,那么如何使用Java8按值对该映射进行排序,从而只获取前10个条目。 我知道在Java 8之前,我们可以按以下链接排序:https://stackoverflow.com/a/109389/4315608

  • 问题内容: 它有点难以解释。跳到示例可能会更容易。 一个表有一个ID和四列,每列允许为空。 有x行数。(通常小于4)并且在整个列中最多只能使用4个不同的值。 我希望返回最多4行,其中结果集中的每一行基本上都是一列值,其中该值是从顶部保留Col编号开始从右向左选择的。如果另一行的值不是列唯一,则将其移至下一个可用列。 例子: 如果我有: 我想回来 和 给 和 给 谢谢!当存在非唯一列并且值之间存在空

  • 我有map,我想有一个列表,它按键的对应值排序(最小到最大)。我的尝试是:

  • 我有一个HashMap与作为关键和一个值作为价值。 我的目标是通过降序值对Hashmap进行排序。应在

  • 问题内容: 如何按名称->值对json文件排序?我想按标签名称的asc值显示。任何想法如何转换我的json文件? 这是我的JSON文件的外观: 如果有人帮助我,我将不胜感激。提前致谢。 问题答案: 我建议使用