【问题标题】:Sort a HashMap inside a Map based on value根据值对 Map 中的 HashMap 进行排序
【发布时间】:2016-01-21 09:18:22
【问题描述】:


我正在尝试根据字母值对哈希图进行排序,该值本身存储在另一个 Map 中。

结构如下: Map<String, HashMap<String, String>>

我想根据里面 HashMap 的值对这个 Map 进行排序,所以所有的全图都会被排序,所以 HashMap 基于 HashMap 的值。

-- 更新:

例如,如果我有类似的东西:

Map: abc Value: HashMap[EN, a]
Map: xyz Value: HashMap[DE, c]
Map: pqr Value: HashMap[PL, b]

然后排序后应该是这样的:

Map: abc Value: HashMap[EN, a]
Map: pqr Value: HashMap[PL, b]
Map: xyz Value: HashMap[DE, c]

如何进行?

【问题讨论】:

标签: java android sorting hashmap


【解决方案1】:

对值进行排序可能不是一个好主意,因为如果您更改值映射中的内容,它会假设排序变得不正确。

如果真的要按值排序,那么需要再创建一个map:

final Map<String, Map<String, String>> map= new HashMap<>();

Map<String, String> map1 = new HashMap<>();
map1.put("EN", "a");
Map<String, String> map2 = new HashMap<>();
map2.put("DE", "c");
Map<String, String> map3 = new HashMap<>();
map3.put("PL", "b");

map.put("abc", map1);
map.put("xyz", map2);
map.put("pqr", map3);

TreeMap<String, Map<String, String>> sorted = new TreeMap<>(new Comparator<String>() {

    @Override public int compare(String s1, String s2) {
        String value1 =  map.get(s1).values().iterator().next();
        String value2 =  map.get(s2).values().iterator().next();

        return value1.compareTo(value2);
    }
});
sorted.putAll(map);

for(Map.Entry<String, Map<String, String>> e : sorted.entrySet()) {
    System.out.println(e.getKey());
}

【讨论】:

  • @j0d0 我根本没听懂你。我们只需要返回一个包含“按值排序的 HashMap”的 Map。源地图不会改变......嗯......在那个时间点。
  • 你告诉你想根据HashMap对你的地图进行排序,对吧?如果你改变一个 hashmap 的值会发生什么?也许你不会这样做,但这是一个例子来解释为什么你不应该根据值进行排序。
  • @j0d0 请查看更新后的问题。好吧,我明白你的意思,但是如果我们递归执行两次,这可以解决吗?或者可能是另一个包含已排序哈希图的数据集?
  • 我在回答中添加了一个示例
猜你喜欢
  • 1970-01-01
  • 2020-09-04
  • 1970-01-01
  • 2021-03-26
  • 1970-01-01
  • 1970-01-01
  • 2016-09-11
  • 2011-03-05
  • 2012-09-28
相关资源
最近更新 更多