自定义排序映射Java

时间:2017-07-04 19:27:53

标签: java android sorting hashmap

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

那样组织起来
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}&#34; correo2&#34; - &GT; &#34; oipoa@gmaio.com"

1 = {HashMap $ HashMapEntry @ 5855}&#34; correo1&#34; - &GT; &#34; rst008@guan.com"`

2 = {HashMap $ HashMapEntry @ 5856}&#34; numero2&#34; - &GT; &#34; 55655545&#34;

3 = {HashMap $ HashMapEntry @ 5857}&#34; nombre&#34; - &GT; &#34; EDIFICADORA JUANA&#34;

4 = {HashMap $ HashMapEntry @ 5858}&#34;描述&#34; - &GT; &#34; LOS frst com MEJORES Estamso 帕&#34;

5 = {HashMap $ HashMapEntry @ 5859}&#34; numero1&#34; - &GT; &#34; 24602254&#34;

如何像字符串值一样对此地图进行排序?

我期待:

0 = {HashMap $ HashMapEntry @ 5857}&#34; nombre&#34; - &GT; &#34; EDIFICADORA JUANA&#34;

1 = {HashMap $ HashMapEntry @ 5858}&#34;描述&#34; - &GT; &#34; LOS frst com MEJORES Estamso par&#34;

2 = {HashMap $ HashMapEntry @ 5855}&#34; correo1&#34; - &GT; &#34; rst008@guan.com"`

3 = {HashMap $ HashMapEntry @ 5854}&#34; correo2&#34; - &GT; &#34; oipoa@gmaio.com"

4 = {HashMap $ HashMapEntry @ 5859}&#34; numero1&#34; - &GT; &#34; 24602254&#34;

5 = {HashMap $ HashMapEntry @ 5856}&#34; numero2&#34; - &GT; &#34; 55655545&#34;

3 个答案:

答案 0 :(得分:2)

使用make的{​​{3}}实施,而不是HashMap 迭代时,它会在地图中保留插入顺序:

  

使用Hash表和Map接口的链表实现   可预测的迭代顺序。

这样改变:

Map

答案 1 :(得分:1)

使用LinkedHashMap,这将保留广告订单。

简单地替换

new HashMap<>();

new LinkedHashMap<>();

答案 2 :(得分:1)

问题是您正在使用HashMap。来自他们的文档:

  

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

您正在寻找能够维护您将内容放入地图的顺序的内容,因此LinkedHashMap可以提供帮助。如果这对您来说还不够,您可以编写自己的Map实现来实现SortedMap