免责声明:我已经发布了这样一个问题,并且标记为重复。请尝试帮助我。我已经完成了stackoverflow上所有以前的方法,没有任何帮助。所有提到的对Map(Key,Values)进行排序的方法在我的情况下都不起作用,因为我还有一步,即检索值的属性。这一次,我试着详细介绍。
我在Java中有一个Map(String,Object),我想使用Object的一个属性对它进行排序。
e.g。假设我有一个班级
clientHeight
现在,我创建了一张地图
class Entry
{
int id;
String name;
String address;
//Rest of the code
}
我想按类Entry(Entry.id)
的属性id对地图进行排序请帮忙!
例如,我有三个Entry类的对象
Map<String,Entry>
现在,我的地图最初如下:
entry1 :
id=1
name="abc"
address="india"
entry2 :
id=2
name="xyz"
address="india"
entry3 :
id=3
name="pqr"
address="india"
排序后,它应该像
Key : Value
first: entry2
second: entry3
third : entry1
答案 0 :(得分:1)
您可以使用流API轻松完成任务:
Map<String, Entry> resultSet = myMap.entrySet()
.stream()
.sorted(Comparator.comparingInt(e -> e.getValue().getId()))
.collect(Collectors.toMap(Map.Entry::getKey,
Map.Entry::getValue,
(left, right) -> left,
LinkedHashMap::new));
答案 1 :(得分:1)
您的要求通常是数据结构使用不良的症状。
如果您希望按关键对象的属性对地图进行排序,您只需编写自定义比较器,但由于您希望按值排序,因此它会更复杂。
尝试理解这个问题的答案:Sort a Map<Key, Value> by values。然后尝试组合使用自定义比较器。
答案 2 :(得分:-3)
您无法对地图进行排序。
您可以拥有一个可以对其条目进行排序的地图,也可以对List<Map.Entry>
进行排序。
试试这个:
Map<String, Entry> map; // your map
Map<String, Entry> sorted = new TreeMap<>(Comparator.comparing(s -> map.get(s).getId());
sorted.putAll(map);