【问题标题】:How to change the sequence of entries in TreeMap based on the 'Key'如何根据“键”更改 TreeMap 中的条目顺序
【发布时间】:2020-08-14 08:32:48
【问题描述】:

我有一个Map<String,List<UserVO>> studentsByCountry = new TreeMap<String,List<UserVO>>();

显示如下:

key=CountryA , value = List<UserVO>
key=CountryB , value = List<UserVO>
key=CountryC , value = List<UserVO>

我可以重新洗牌这个Map 以便我根据国家/地区的 displayOrder 显示。显示顺序为 countryC=1, countryB=2 & countryA=3。我想显示像

key=CountryC , value = List<UserVO>
key=CountryB , value = List<UserVO>
key=CountryA , value = List<UserVO>

一种选择是将 sortOrderNumber 附加到键上。 For example 1_CountryC, 2_CountryB &amp; 3_CountryA

我可以通过传统的 Java 来实现吗?

【问题讨论】:

  • TreeMap 应该如何知道哪个在前,哪个在后?键中没有任何内容表明 CountryC 应该​​是最低元素。
  • 那么附加 1_、2_ 等是唯一的选择吗?
  • 不,不是唯一的。但是您需要有一个规则来确定哪个是顺序,然后将其作为 Comparator 实现,您将传递给 TreeMap 的构造函数。

标签: java sorting treemap


【解决方案1】:

你应该使用new TreeMap&lt;String, List&lt;UserVO&gt;&gt;();

Map<String, List<UserVO>> sortedMap = new TreeMap<>(Collections.reverseOrder());
sortedMap.putAll(myMap);

灵感来自:Sorting Descending order: Java Map

如果你想要一个无序的地图,你应该使用HashMap

Java 中的TreeMap 是Map 接口的实现之一。它与其他实现 HashMap 的不同之处在于与HashMap which is unorderedTreeMap is Sorted 不同。

【讨论】:

  • .reverseOrder() 表示降序。我想保持动态。所以有时如果 sortOrder 定义为 DBAC,那么我们会显示:CountryD, CountryB, CountryA, CountryC
  • [CountryD, CountryB, CountryA, CountryC] 不是sortOrder,应该实现HashMap。或者您需要添加任何前缀来定义订单。
  • 是的,正如我所说,一种选择是将 sortOrderNumber 附加到键上。例如 1_CountryC、2_CountryB 和 3_CountryA
猜你喜欢
  • 2021-05-12
  • 2021-09-07
  • 2021-12-21
  • 2016-12-30
  • 2021-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-20
相关资源
最近更新 更多