簡體   English   中英

如何排序 java 列表<map<string, object> &gt; 按字符串升序? </map<string,>

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM