2017-08-03 78 views
0

我有以下的HashMap哈希表進行排序在java8

"1": 
    { 
    "profilePic":null, 
    "roleNo" : "12" 
    }, 
"2": 
    { 
    "profilePic":null, 
    "roleNo" : "1" 
    } 

我想要的輸出如下

"2": 
    { 
    "profilePic":null, 
    "roleNo" : "1" 
    }, 
"1": 
    { 
    "profilePic":null, 
    "roleNo" : "12" 
    } 

我曾嘗試下面的代碼,但沒有如預期得到的輸出

LinkedHashMap<Long, Person> newPerson = attendanceMap 
    .entrySet() 
    .stream() 
    .sorted(Map.Entry.comparingByValue(new AttendanceListComparator())) 
    .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, LinkedHashMap::new)); 

我的參會名單比較如下

@Override 
public int compare(Person s1, Person s2) { 
    return sortingOrder*s1.getRoleno().compareTo(s2.getRoleno()); 
} 

請建議我的東西來獲取排序的數據

+0

您可能想使用'TreeMap' –

+0

什麼是您正在傳遞的sortingOrder?具有該值的輸出是什麼? – SachinSarawgi

+0

@SachinSarawgi the sortingOrder is 1 – ankit

回答

0

下面的代碼將在您的HashMap條目進行排序,並將其存儲在一個列表:

List<Map.Entry<Long, Player>> sorted = mapp.entrySet().stream() 
    .sorted(Comparator.comparingLong(Map.Entry::getKey)) 
    .collect(toList()); 
0

你必須通過值的地圖排序使用。按值排序時使用Person對象的'Roleno'。如果你想,如果你想按降序排列使用

o2.getRoleno().compareTo(o1.getRoleno()) 

的樣本代碼可能是如下排序中使用的升序進行排序

o1.getRoleno().compareTo(o2.getRoleno()) 

否則:

private static Map<Long, Person> sortByValueMap(Map<Long, Person> unsortMap) { 

    List<Map.Entry<Long, Person>> list = new LinkedList<Map.Entry<Long, Person>>(unsortMap.entrySet()); 

    Collections.sort(list, new Comparator<Map.Entry<Long, Person>>() { 
     public int compare(Map.Entry<Long, Person> o1, Map.Entry<Long, Person> o2) { 
      return (o2.getRoleno()).compareTo(o1.getRoleno()); 
     } 
    }); 


    Map<Long, Person> sortedMap = new LinkedHashMap<Long, Person>(); 
    for (Map.Entry<Long, Person> entry : list) { 
     sortedMap.put(entry.getKey(), entry.getValue()); 
    } 

    return sortedMap; 
} 

希望這有助於。如果您有任何疑問,請在評論中寫下。