[英]How to sort java List<Map<String, Object>> by String asc?
我的 java 代碼是這樣的:
List<SysUser> sysUserDeleteDuplicate = new ArrayList<SysUser>(new HashSet<SysUser>(sysUser));
List<Map<String, Object>> rList = new ArrayList<Map<String, Object>>();
if(sysUserDeleteDuplicate!=null && sysUserDeleteDuplicate.size()>0){
for (int i=0; i<sysUserDeleteDuplicate.size(); i++){
Map<String, Object> resultMap = new HashMap<String, Object>();
resultMap.put("text", sysUserDeleteDuplicate.get(i).getRealname());
resultMap.put("value", sysUserDeleteDuplicate.get(i).getId());
rList.add(resultMap);
}
}
我想按String
升序對rList
中的元素進行排序。 rList 中的數據是這樣的:
[{text=peter,value=1001},{text=lucy,value=1004},{text=kate,value=1002}]
我想要這個結果:
[{text=kate,value=1002},{text=lucy,value=1004},{text=peter,value=1001}]
由於每個列表元素都是Map
可能包含多個Object
實例,因此您首先需要重新定義排序標准。
如果您說要按Object
中最大的Map
對列表進行排序,它將起作用。
But as java.lang.Object
does not define java.lang.Comparable<Object>
, there is no natural order for instances of Object
. 因此,您還需要為Object
定義排序標准。 由於沒有那么多屬性,只有 hash 代碼或Object.toString()
的結果可以工作。
使用這些信息,您可以實現一個Comparator
,它可以用作List.sort()
的參數。
您需要為此制作一個自定義比較器(一些排序標准)。 就像是:
Collections.sort(rListMap, new Comparator<Map<String, Comparable>> () {
@Override
public int compare(Map<String, Comparable> a1, Map<String, Comparable> a2) {
return a2.get(someThing).compareTo(a1.get(someThing));
}
});
正如 Shubham 和 tquadrat 所說,我將List<Map<String, Object>>
修改為List<Map<String, String>>
我使用這段代碼:
List<SysUser> sysUserDeleteDuplicate = new ArrayList<SysUser>(new HashSet<SysUser>(sysUser));
List<Map<String, String>> rList = new ArrayList<Map<String, String>>();
if(sysUserDeleteDuplicate!=null && sysUserDeleteDuplicate.size()>0){
for (int i=0; i<sysUserDeleteDuplicate.size(); i++){
Map<String, String> resultMap = new HashMap<String, String>();
resultMap.put("text", sysUserDeleteDuplicate.get(i).getRealname());
resultMap.put("value", sysUserDeleteDuplicate.get(i).getId());
rList.add(resultMap);
}
}
Collections.sort(rList, new Comparator<Map<String, String>> () {
@Override
public int compare(Map<String, String> a1, Map<String, String> a2) {
return a1.get("text").compareTo(a2.get("text"));
}
});
System.out.println(rList.toString());
output:
[{text=kate, value=1002}, {text=lucy, value=1004}, {text=peter, value=1001}]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.