我有以下HashMap
"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 :(得分:0)
以下代码将对您的HashMap
条目进行排序并将其存储在列表中:
List<Map.Entry<Long, Player>> sorted = mapp.entrySet().stream()
.sorted(Comparator.comparingLong(Map.Entry::getKey))
.collect(toList());
答案 1 :(得分:0)
您必须为地图使用按值排序。按值排序时使用Person对象的'Roleno'。如果您想按升序排序
o1.getRoleno().compareTo(o2.getRoleno())
否则,如果您想按降序排序,请使用
o2.getRoleno().compareTo(o1.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;
}
希望这会有所帮助。如果您有任何疑问,请在评论中写下。