【问题标题】:Sorting a Map<String, Object> by Object Parameter in Java [duplicate]在Java中按对象参数对Map <String,Object>进行排序[重复]
【发布时间】:2021-05-09 23:50:41
【问题描述】:

我有以下问题:

我有一个由String 作为键和Object 作为值的映射。我想按 Object 的参数之一对 Map 的键进行排序。

Map<String, Trainer> trainers = new TreeMap<>(); <-- This is my map

对象Trainer 有参数 - 名称和点。 我想按得分最多的人对地图进行排序。 如何在 Stream API 的帮助下做到这一点?

【问题讨论】:

标签: java sorting object maps


【解决方案1】:

您可以使用该代码,例如:

  Map<String, Trainer> source = new HashMap<>();
  source.put("Z", new Trainer("z", 2));
  source.put("B", new Trainer("b", 6));
  source.put("C", new Trainer("c", 1));
  source.put("D", new Trainer("d", 11));

  LinkedHashMap<String, Trainer> result = source.entrySet().stream()
            .sorted(Map.Entry.comparingByValue(Comparator.comparing(Trainer::getPoint)))
            .collect(toMap(Map.Entry::getKey, Map.Entry::getValue, (s1, s2) -> s1, LinkedHashMap::new));

输出:

{C=Trainer{name='c', point=1}, Z=Trainer{name='z', point=2}, B=Trainer{name='b', point=6}, D=Trainer{name='d', point=11}}

您已使用 LinkedHashMap 订购。 当您需要 TreeMap 时,请使用 new TreeMap(result);

如果您想按名称比较 Trainer 的对象,请将比较器更改为:

Comparator.comparing(Trainer::getName)

您还可以通过多个字段进行更严格的比较,例如:

Comparator.comparing(Trainer::getPoint).thenComparing(Trainer::getName)

【讨论】:

    猜你喜欢
    • 2021-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-26
    • 2023-04-07
    相关资源
    最近更新 更多