我有一个类型为List<Map<String, String>>的数据结构,我希望根据值对列表中的所有Map值进行排序。例如,列表在迭代时会给出一个Map,它由两个键值对组成。
Map1--> Key1: abc and key2: Sometext2
Map2 --> Key1: cbd and key2: Sometext2
Map3 --> Key1: bcd and key2: Sometext2
.
.
.
.诸若此类。我希望按照映射到key1的值按字母顺序对数据结构进行排序,因此它应该如下所示:
Map1--> Key1: abc and key2:Sometext2.
Map3 --> Key1: bcd and key2: Sometext2
Map2 --> Key1: cbd and key2: Sometext2
.
.
.
.我使用的是Java7,如有任何帮助,我将不胜感激。
谢谢
发布于 2015-12-18 02:52:43
根据您的示例,您的Map只是一对(String, String)。
所以我们可以这样做:
public class MyCouple {
private String first;
private String second;
// + constructors, getters, setters
}
List<MyCouple> couples = // ...
Collections.sort(couples, new Comparator<MyCouple>(){
@Override
public int compare(MyCouple c1, MyCouple c2) {
return c1.getSecond().compareTo(c2.getSecond()); // sort by second
}
});发布于 2015-12-18 02:55:04
您可以对map使用包装类,然后获取列表的迭代器。如下所示:
class MapWrapper implements Comparable<Map> {
private Map<String, String> map;
public MapWrapper (Map<String, String> map) {
this.map = map;
}
public int compareTo() {
do stuff
}
}发布于 2015-12-18 02:55:29
我也有类似的需求,我开发了一个类似的地图。类声明是:
public class ComparableMap<K,V> extends TreeMap<K,V> implements Comparable<ComparableMap<K,V>> {
@Override
public int compareTo(ComparableMap<K,V> o) {...}
}由于TreeMap迭代器返回排序后的键,因此要比较两个映射,您需要遍历键,比较每个键,直到两个键不相等,或者对于相等的键,值不相等,返回适当的结果,具体取决于哪个更小。当到达一个键集的末尾时,如果其他键集有键,那么它们也是不相等的,您应该返回适当的比较结果。
最后,您可以使用Collections.sort()对映射列表进行排序,因为将使用compareTo方法来确定排序顺序。
希望这篇文章能给你一些启发。
如果您希望对所有映射中的各个键进行排序,则可能需要生成一个合并的映射。
https://stackoverflow.com/questions/34342000
复制相似问题