【问题标题】:Java sort HashMap values which are List<Value>Java 对 List<Value> 的 HashMap 值进行排序
【发布时间】:2014-12-11 19:01:21
【问题描述】:

我得到了 HashMap:

HashMap<String, List<Value>> facetsInCategories = new HashMap<>();

我需要对这个 HashMap 的值内的值列表进行排序。列表中的值有四个字段,我需要按“translatedValue”字符串对列表进行排序。这就是我将“getTranslatedValue”放在自定义比较器中的原因。这是值对象字段:

public String name;
public int count;
private String translatedValue;
private String translation;

这是我尝试过的:

for (List<Value> value : facetsInCategories.values()) {
    Collections.sort(value, new Comparator<Value>() {
            @Override
            public int compare(Value o1, Value o2) {
                return o1.getTranslatedValue().compareTo(o2.getTranslatedValue());
            }
    });
}

我已经这样做了几个小时了,所以我想你可以就此提出一些建议。

【问题讨论】:

  • 你得到的结果是什么,你期望的结果是什么?
  • 我希望上面的代码可以根据 String-compareTo 的 'translatedValue' 的结果对你的值对象进行排序......这已经发生了吗?
  • 为什么要把列表放回地图上?没有必要这样做。排序应该工作文件。
  • 我现在担心的是 for (List value : facetsInCategories.values()) 在第二次迭代中抛出错误。我认为这不应该发生。
  • facetsInCategories.put("test", value);只是为了测试,我现在从问题中删除了它。

标签: java sorting hashmap comparator


【解决方案1】:

代码看起来不错。 Collections.sort 将对列表进行就地排序。

为什么需要这条线?

facetsInCategories.put("test", value);

列表已添加到哈希图中。并且它们将在它们所在的位置进行排序。

从 null 安全的角度来看,您假设这永远不会为 null:

o1.getTranslatedValue()

【讨论】:

    【解决方案2】:

    评论这一行,它应该可以解决问题:

    facetsInCategories.put("test", value);
    

    【讨论】:

    • facetsInCategories.put("test", value);只是为了测试,我现在从问题中删除了它。我现在担心的是 for (List value : facetsInCategories.values()) 在第二次迭代中抛出错误。我认为这不应该发生。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 2017-09-22
    相关资源
    最近更新 更多