java - 尝试按列表项对 HashMap<String, List<String>> 进行排序

标签 java algorithm list sorting hashmap

我有一个 HashMap<String, List<String>>,但我不知道如何按第 3 个列表项对其进行排序。我试过使用比较器,但我可以用它来查看第三个列表项。

我正在使用的 HashMap:

HashMap<String, List<String>> hmap= new HashMap<String, List<String>>();
List<String> prod1 = new ArrayList<String>();
prod1.add("123456789102");
prod1.add("3.0");
prod1.add("8");
hmap.put("Blue magazine", prod1);
List<String> prod2 = new ArrayList<String>();
prod2.add("123456789102");
prod2.add("2.0");
prod2.add("7");
hmap.put("Pink magazine", prod2);
List<String> prod3 = new ArrayList<String>();
prod3.add("123456789102");
prod3.add("1.0");
prod3.add("6");
hmap.put("Black magazine", prod3);

我正在尝试将其排序为低 - 高(整数)第二个列表项。 所以:6 - 7 - 8

    List list = new LinkedList(map.entrySet());
    Collections.sort(list, new Comparator() {
        public int compare(Object o1, Object o2) {
        return ((Comparable) ((Map.Entry)(o1)).getValue()).compareTo(((Map.Entry)(o2)).getValue());
        }
    });

编辑:为每个请求添加了比较器尝试。

最佳答案

另一种方法不需要访问 Comparator 中的 listhmap 并生成排序的 Map:

List<Map.Entry<String,List<String>>> list = 
  new LinkedList<Map.Entry<String,List<String>>>(hmap.entrySet());

Collections.sort( list, new Comparator<Map.Entry<String,List<String>>>() {
    public int compare( Map.Entry<String,List<String>> o1,
                        Map.Entry<String,List<String>> o2) {
        return o1.getValue().get( 2 ).compareTo(  o2.getValue().get(2) );
    }
});

Map<String, List<String>> result = new LinkedHashMap<String, List<String>>();
for ( Map.Entry<String, List<String>> n : list )
    result.put( n.getKey(), n.getValue() );

关于java - 尝试按列表项对 HashMap<String, List<String>> 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31703420/

相关文章:

java - Glassfish 4 在禁用 CDI 的情况下扫描 @PostConstruct

java - 使用 string.matches 的正则表达式总是返回 false,尽管我期待 true

python - 从文件的列表/行中收集所有其他字符串

java - 如何将类(class)添加到列表中?

java - 如何避免 API/库中的并行继承层次结构

algorithm - O(1), O(n), O(n*n) 内存是什么意思?

c++ - 用于有序迭代、有序推送和移除的排序数据结构(仅从顶部开始的 N 个元素)

algorithm - 哪种算法返回最短序列以在图的结点之间交换信息?

python - 有什么方法可以像字典一样从列表中的元组中获取值吗?

java - 在 Jenkins 主( headless )节点上使用 native Windows 选择器选择文件