我有一个哈希图:
Map<Integer, List<String>> dataA = new HashMap<>();
包含从Excel电子表格导入的数据。 HashMap键包含行号,HashMap值包含特定行中的单元格值列表。
现在,我需要按列表中特定列(或多个列)对它进行排序。
该怎么做?
答案 0 :(得分:2)
在处理连续键时,Map<Integer, ____>
几乎总是错误地选择数据结构。
0 -> Foo
1 -> Bar
2 -> Baz
您知道这是什么吗?它实际上只是一个列表。使用List<List<String>>
和it'll make your life easier。
答案 1 :(得分:0)
要按值部分对哈希图内容进行排序,请使用比较器并比较哈希图的值部分而不是键部分。
以下代码可用于Comparator的比较方法中,该方法可提供给TreeMap构造函数。
public int compare(Map.Entry<Integer, List<String>> o1,
Map.Entry<Integer, List<String>> o2)
{
return (o1.getValue().get(0)).compareTo(o2.getValue().get(0));
}
在上面的代码中,将0替换为任何列索引。
答案 2 :(得分:0)
如果要订购地图,则使用的是TreeMap。
然后,您需要一门用于订购键的类,例如MySortKey实现Comparable <...>。
然后,您需要在某处可以从每个List
然后,使用.put(mySortKey,list)填充TreeMap,其中这两个变量是MySortKey和List
答案 3 :(得分:0)
获取值集并通过自定义比较器对其进行排序:
Comparator<Map.Entry<Integer, List<String>>> comp =
Comparator.comparing((Map.Entry<Integer, List<String>> e) -> e.getValue().get(firstColumnIndex))
.thenComparing(e -> e.getValue().get(secondColumnIndex));
List<Map.Entry<Integer, List<String>>> sorted =
map.entrySet().stream().sorted(comp).collect(Collectors.toList());