gpt4 book ai didi

java - 根据属性对 Map 进行排序

转载 作者:行者123 更新时间:2023-12-01 12:58:46 25 4
gpt4 key购买 nike

我正在尝试排序:

Map<String,Map<String,Object>>基于属性(dispSeq) .

数据示例如下:

ProductType={BeanTag:'xxx',dispSeq=10,.....}

ChargeType={BeanTag:'yyy',dispSeq=30.1,.....}

Something={BeanTag:'zzz',dispSeq=29,.....}

所以,如上所述,我想根据 dispSeq 对它进行排序。

我知道数据结构不是执行排序的最佳选择...但此时,我无法更改它。

我可以通过以下方式对“内部” map 进行排序:

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;
}
});

}

但是这行不通,因为我丢失了主 map 的 key 。

有什么想法吗?

最佳答案

根据我上面的评论,这些是对 map 进行排序的两种方法。

乍一看可能会令人困惑,但这里的想法是获取条目集并将其转换为列表并使用Collections.sort()方法对列表进行排序。对于外部 map 情况,我获取条目集,并在比较方法中获取 map 中的第一个元素并进行比较。您可以按照适合您的方式更改比较逻辑。

我假设您有一个 ProductType 类型的对象,并且它有一个 dispSeq 字段,该字段为 int/Integer。因此,如果您有多个对象,例如 ProductType、ChargeType 等,您可以使用比较实例进行转换,或者使用 getDispSeq() 方法为所有相关对象提供一个接口(interface);

希望这有帮助。

private static Map<String, Object> sortInnerMap(Map<String, Object> unsortedMap) {

List<Entry<String, Object>> list = new LinkedList<Entry<String, Object>>(unsortedMap.entrySet());

Collections.sort(list, new Comparator<Entry<String, Object>>() {
public int compare(Entry<String, Object> o1, Entry<String, Object> o2) {
return ((Comparable) ((ProductType) o1.getValue()).getDispSeq())
.compareTo(((ProductType) o2.getValue()).getDispSeq());
}
});

Map<String, Object> sortedMap = new LinkedHashMap<String, Object>();
for(Entry<String, Object> item : list){
sortedMap.put(item.getKey(), item.getValue());
}
return sortedMap;
}

private static Map<String, Map<String, Object>> sortOuterMap(
Map<String, Map<String, Object>> unsortedMap) {

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

Collections.sort(list,
new Comparator<Entry<String, Map<String, Object>>>() {
public int compare(Entry<String, Map<String, Object>> o1,
Entry<String, Map<String, Object>> o2) {
return ((Comparable) ((ProductType) o1.getValue()
.entrySet().iterator().next().getValue())
.getDispSeq()).compareTo(((ProductType) o2.getValue()
.entrySet().iterator().next().getValue())
.getDispSeq());
}
});

Map<String, Map<String, Object>> sortedMap = new LinkedHashMap<String, Map<String, Object>>();
for(Entry<String, Map<String, Object>> item : list){
sortedMap.put(item.getKey(), item.getValue());
}
return sortedMap;
}

关于java - 根据属性对 Map 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23673093/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com