【发布时间】:2014-05-15 08:33:49
【问题描述】:
我正在尝试排序:
Map<String,Map<String,Object>>
基于属性(dispSeq)。
数据的一个例子是:
ProductType={BeanTag:'xxx',dispSeq=10,.....}
ChargeType={BeanTag:'yyy',dispSeq=30.1,.....}
Something={BeanTag:'zzz',dispSeq=29,.....}
所以,如上所述,我想根据 dispSeq 对其进行排序。
我知道数据结构不是执行排序的最佳选择......但在这一点上,我无能为力。
我可以通过以下方式对“内部”地图进行排序:
private void orderColumns(Map columnDetails) {
List<Map<String, Object>> columnsValues = new ArrayList<Map<String, Object>>(
columnDetails.values());
Collections.sort(columnsValues, new Comparator<Map<String, Object>>() {
public int compare(Map<String, Object> o1, Map<String, Object> o2) {
if (Integer.parseInt(o1.get("dispSeq").toString()) == Integer
.parseInt(o2.get("dispSeq").toString()))
return 0;
return Integer.parseInt(o1.get("dispSeq").toString()) < Integer
.parseInt(o2.get("dispSeq").toString()) ? -1 : 1;
}
});
}
但这不会起作用,因为我失去了主地图的钥匙。
有什么想法吗?
【问题讨论】:
-
当你说
o2.get("dispSeq")这是否意味着你的对象的关键是dispSeq?根据您的示例,这是您价值对象中的一个归档?他们都一样吗? -
o2.get("dispSeq") ,是检索值(数字)进行排序。关键是“dispSeq”。
-
这张地图有两种排序方式。根据来自 ProductType、ChargeType 等对象的 dispSeq 值对内部映射进行排序。或者根据内部映射中值对象的 dispSeq 对外部映射进行排序。在后一种情况下,排序将仅比较内部映射中第一项的值。您在这里的要求是哪一个?
-
对外部地图进行排序将是我认为的最佳解决方案。但我无法以合乎逻辑的方式思考:S。