Java 基于地图列表中键的值比较
我有一个字符串到字符串的映射,我想根据kayJava 基于地图列表中键的值比较,java,comparator,Java,Comparator,我有一个字符串到字符串的映射,我想根据kayF的值对映射进行排序,但是我的代码没有这样做。请告知 Map<String, String> h = null; Map<String, String> h1 = null; Map<String, String> h2 = null; listSummaryMap = new ArrayList<Map<String, String>>(); h =
F
的值对映射进行排序,但是我的代码没有这样做。请告知
Map<String, String> h = null;
Map<String, String> h1 = null;
Map<String, String> h2 = null;
listSummaryMap = new ArrayList<Map<String, String>>();
h = new HashMap<String, String>();
h.put("SUCCESS", "27");
h.put("TOTAL_HOTELS", "86");
h.put("F", "86");
h.put("RESERVATION_MODE", "86");
h.put("PARTNER_NAME", "86");
h1 = new HashMap<String, String>();
h1.put("SUCCESS", "27");
h1.put("TOTAL_HOTELS", "86");
h1.put("F", "36");
h1.put("RESERVATION_MODE", "86");
h1.put("PARTNER_NAME", "86");
h2 = new HashMap<String, String>();
h2.put("SUCCESS", "27");
h2.put("TOTAL_HOTELS", "86");
h2.put("F", "28");
h2.put("RESERVATION_MODE", "86");
h2.put("PARTNER_NAME", "86");
listSummaryMap .add(h);
listSummaryMap .add(h1);
listSummaryMap .add(h2);
Collections.sort(listSummaryMap , new Comparator<Map<String, String>>() {
@Override
public int compare(Map<String, String> o1, Map<String, String> o2) {
return o2.get("F").compareTo(o1.get("F"));
}
});
Map h=null;
Map h1=null;
Map h2=null;
listSummaryMap=newArrayList();
h=新的HashMap();
h、 卖出(“成功”,“27”);
h、 出售(“TOTAL_HOTELS”、“86”);
h、 认沽权(“F”、“86”);
h、 put(“预订模式”、“86”);
h、 出售(“合伙人名称”、“86”);
h1=新的HashMap();
h1.put(“成功”、“27”);
h1.put(“TOTAL_HOTELS”,“86”);
h1.投入(“F”,“36”);
h1.put(“预约模式”、“86”);
h1.投入(“合伙人名称”、“86”);
h2=新的HashMap();
h2.认沽期权(“成功”、“27”);
h2.put(“道达尔酒店”、“86”);
h2.认沽权(“F”、“28”);
h2.put(“保留模式”、“86”);
h2.出售(“合伙人名称”、“86”);
listSummaryMap.add(h);
listSummaryMap.add(h1);
listSummaryMap.add(h2);
排序(listSummaryMap,新的Comparator(){
@凌驾
公共整数比较(映射o1,映射o2){
返回o2.get(“F”)。与(o1.get(“F”))进行比较;
}
});
将字符串
s转换为整数
s,并作为整数
s进行比较:
public int compare(Map<String, String> o1, Map<String, String> o2) {
return Integer.valueOf(o2.get("F")).compareTo(Integer.valueOf(o1.get("F")));
}
公共整数比较(映射o1,映射o2){
返回Integer.valueOf(o2.get(“F”)).compareTo(Integer.valueOf(o1.get(“F”));
}
这是假设“F”
键始终存在于映射
s中,并且其值始终可以解析为整数
顺便说一句,我看不到您将
Map
s添加到listSummaryMap
的位置。您忘记在问题中包含该代码了吗?首先需要将字符串转换为整数,然后比较将按如下方式工作
Collections.sort(listSummaryMap , new Comparator<Map<String, String>>() {
@Override
public int compare(Map<String, String> o1, Map<String, String> o2) {
Integer a=Integer.parseInt(o2.get("F"));
Integer b=Integer.parseInt(o1.get("F"));
return b.compareTo(a);
}
});
Collections.sort(listSummaryMap,new Comparator(){
@凌驾
公共整数比较(映射o1,映射o2){
整数a=Integer.parseInt(o2.get(“F”));
整数b=Integer.parseInt(o1.get(“F”));
返回b.compareTo(a);
}
});
您忘记将地图添加到列表中,并且地图h3从未初始化。拆开你的代码已经按原样工作了,但是将映射从最高id排序到最低id。如果您将比较行更改为:
Collections.sort(listSummaryMap , new Comparator<Map<String, String>>() {
@Override
public int compare(Map<String, String> o1, Map<String, String> o2) {
return o1.get("F").compareTo(o2.get("F"));
}
});
Collections.sort(listSummaryMap,new Comparator(){
@凌驾
公共整数比较(映射o1,映射o2){
返回o1.get(“F”)。与(o2.get(“F”))进行比较;
}
});
然后它将按“F”从最低值到最高值对地图进行排序
希望它对Collections.addAll(listSummaryMap,h,h1,h2)有所帮助代码>创建完所有地图后。感谢Jekin Kalariya、Eran和所有人