【问题标题】:Custom sort Map Java自定义排序 Map Java
【发布时间】:2017-12-08 08:09:56
【问题描述】:

当我想对地图进行排序时遇到一些麻烦,当我创建一个传递字符串的地图时,它会像

nombre=EDIFICADORA JUANA, descripcion=  LOS frst com MEJORES Estamso para servir LOS, correo1=rst008@guan.com, correo2=oipoa@gmaio.com, numero1=24602254, numero2=55655545

当我使用这些数据创建地图时,它会变得混乱,这是创建地图的方法:

   private HashMap<String, String> getMap(String rawData) {
    HashMap<String, String> map = new HashMap<>();
    String[] pairs = rawData.split(","); // split into key-value pairs
    for(String pair: pairs) {
        pair = pair.trim(); // get rid of extraneous white-space
        String[] components = pair.split("=");
        String key = components[0].trim();
        String value = components[1].trim();
        map.put(key, value); // put the pair into the map
    }
    return map;
}

这个函数返回类似:

0 = {HashMap$HashMapEntry@5854} "correo2" -> "oipoa@gmaio.com"

1 = {HashMap$HashMapEntry@5855} "correo1" -> "rst008@guan.com"`

2 = {HashMap$HashMapEntry@5856} "numero2" -> "55655545"

3 = {HashMap$HashMapEntry@5857} "名词" -> "EDIFICADORA JUANA"

4 = {HashMap$HashMapEntry@5858} "描述" -> "LOS frst com MEJORES Estamso 标准”

5 = {HashMap$HashMapEntry@5859} "numero1" -> "24602254"

我怎样才能像字符串值一样对这个 Map 进行排序?

我希望:

0 = {HashMap$HashMapEntry@5857} "名词" -> "EDIFICADORA JUANA"

1 = {HashMap$HashMapEntry@5858}“描述”->“LOS frst com MEJORES Estamso par”

2 = {HashMap$HashMapEntry@5855} "correo1" -> "rst008@guan.com"`

3 = {HashMap$HashMapEntry@5854} "correo2" -> "oipoa@gmaio.com"

4 = {HashMap$HashMapEntry@5859} "numero1" -> "24602254"

5 = {HashMap$HashMapEntry@5856} "numero2" -> "55655545"

【问题讨论】:

  • "我怎样才能像字符串值一样对这个 Map 进行排序?"我不确定会得到你。你能给出预期输出的样本吗?
  • 好吧!,对不起@davidxxx
  • numero(你的字符串最后一个)和correo(你的地图最后一个)的不同顺序是故意的吗?因为在我的书中,这不是“像字符串值一样”。
  • 再次抱歉,我编辑了@davidxxx,我可以使用 LinkedHashMap 来回答这个问题吗?
  • @Johan Sánchez 好的,我明白了。您希望将订单保留在传递的String : "nombre=EDIFICADORA JUANA, descripcion= LOS frst com MEJORES Estamso para servir LOS, correo1=rst008@guan.com, correo2=oipoa@gmaio.com, numero1=24602254, numero2=55655545"

标签: java android sorting hashmap


【解决方案1】:

使用MapLinkedHashMap 实现而不是HashMap
当您迭代时,它会在您的地图中保留插入顺序:

Map接口的哈希表和链表实现,带有 可预测的迭代顺序。

所以做这个改变:

   private LinkedHashMap<String, String> getMap(String rawData) {
    LinkedHashMap<String, String> map = new LinkedHashMap<>(); // change
    String[] pairs = rawData.split(","); // split into key-value pairs
    for(String pair: pairs) {
        pair = pair.trim(); // get rid of extraneous white-space
        String[] components = pair.split("=");
        String key = components[0].trim();
        String value = components[1].trim();
        map.put(key, value); // put the pair into the map
    }
    return map;
}

【讨论】:

    【解决方案2】:

    使用LinkedHashMap,这将保持插入顺序。

    简单替换

    new HashMap<>();
    

    new LinkedHashMap<>();
    

    【讨论】:

      【解决方案3】:

      问题是您使用的是 HashMap。从他们的文档中:

      这个类不保证地图的顺序;特别是,它不保证订单会随着时间的推移保持不变

      您正在寻找能够保持您将事物放入地图的顺序的东西,因此LinkedHashMap 可能会有所帮助。如果这对您来说还不够,您可以编写自己的 Map 实现来实现 SortedMap

      【讨论】:

      • 感谢您的解释! @SaxyPandaBear,感激不尽!
      猜你喜欢
      • 2021-01-19
      • 1970-01-01
      • 1970-01-01
      • 2017-12-13
      • 1970-01-01
      • 1970-01-01
      • 2019-05-07
      • 1970-01-01
      • 2013-09-26
      相关资源
      最近更新 更多