在java8中进行哈希映射排序

时间:2017-08-03 10:54:07

标签: java hashmap linkedhashmap

我有以下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());
}

请建议我获取排序数据

2 个答案:

答案 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;
}

希望这会有所帮助。如果您有任何疑问,请在评论中写下。