如何在哈希映射中多次添加相同的数据值?

时间:2017-09-30 06:35:09

标签: java android for-loop hashmap

我想在hashmap中添加值以作为表单数据发送。现在有些值是单个的,我需要在数组列表的for循环中多次添加一些值。

代码:

  data = new HashMap<String, String>();

                data.put("save", "1");
                data.put("disc", "");
                data.put("term_condi", edt_payment_terms.getText().toString());
                data.put("memo", edt_item_memo.getText().toString());
                data.put("note", edt_note.getText().toString());
                data.put("due_date", mDueDate);
                data.put("pay_terms", edt_payment_terms.getText().toString());
                data.put("currency_id", sessionData.getString("currency_id",""));
                data.put("currency_value",sessionData.getString("currency_value",""));
                data.put("invoice_date", mInvoiceDate);
                data.put("discount", mDiscount.toString());
                data.put("shipping", mShipping.toString());
                data.put("total", mTotalamount.toString());

                for (String email : mEmailList) {
                    data.put("send_to[]", email.toString());
                }

                for(Item item : mItemArrayList) {

                    data.put("tax[]", item.getItemTax());
                    data.put("qty[]", item.getItemQuantity());
                    data.put("item_name[]", item.getItemName());
                    data.put("unit_price[]", item.getItemUnitPrice());
                    data.put("disc[]", item.getDescription());

                }

                data.put("send", "1");

当我运行循环时,我只在hashmap中得到它的最后一个索引。我无法在for循环中初始化哈希映射,所有其他单个值将获得双倍。 我怎样才能做到这一点?请帮忙。谢谢..

2 个答案:

答案 0 :(得分:0)

你可以: 1.使用列表作为值的地图。地图取代。 2.创建一个新的包装类,并将此包装器的实例放在地图中。地图。 3.使用类似元组(保存创建大量包装器)。地图取代。 4.并排使用多个地图。 实例

  1. 使用列表作为值

    进行映射

    //创建我们的地图 地图&GT; peopleByForename = new HashMap&gt;();

    //填充它 List people = new ArrayList(); people.add(新人(&#34; Bob Smith&#34;)); people.add(新人(&#34; Bob Jones&#34;)); peopleByForename.put(&#34; Bob&#34;,people);

    //从中读取 列出bobs = peopleByForename [&#34; Bob&#34;]; 人bob1 = bobs [0]; 人bob2 = bobs [1];

  2. 这种方法的缺点是列表没有绑定到两个值。

    1. 使用包装器类

      //定义我们的包装器 class Wrapper {     public Wrapper(Person person1,Person person2){        this.person1 = person1;        this.person2 = person2;     }

      public Person getPerson1 { return this.person1; }
      public Person getPerson2 { return this.person2; }
      
      private Person person1;
      private Person person2;
      

      }

      //创建我们的地图 映射peopleByForename = new HashMap();

      //填充它 包装人=新包装() peopleByForename.put(&#34; Bob&#34 ;, new Wrapper(new Person(&#34; Bob Smith&#34;),                                         新人(&#34; Bob Jones&#34;));

      //从中读取 Wrapper bobs = peopleByForename [&#34; Bob&#34;]; 人bob1 = bobs.Person1; 人bob2 = bobs.Person2;

    2. 这种方法的缺点是你必须为所有这些非常简单的容器类编写大量的样板代码。

      1. 使用元组
      2. //你必须用Java编写或下载一个Tuple类,(.NET附带一个)

        // create our map
        Map<string, Tuple2<Person, Person> peopleByForename = new HashMap<string, Tuple2<Person, Person>>();
        
        // populate it
        peopleByForename.put("Bob", new Tuple2(new Person("Bob Smith",
                                               new Person("Bob Jones"));
        
        // read from it
        Tuple<Person, Person> bobs = peopleByForename["Bob"];
        Person bob1 = bobs.Item1;
        Person bob2 = bobs.Item2;
        This is the best solution in my opinion.
        
        4. Multiple maps
        
        // create our maps
        Map<string, Person> firstPersonByForename = new HashMap<string, Person>();
        Map<string, Person> secondPersonByForename = new HashMap<string, Person>();
        
        // populate them
        firstPersonByForename.put("Bob", new Person("Bob Smith"));
        secondPersonByForename.put("Bob", new Person("Bob Jones"));
        
        // read from them
        Person bob1 = firstPersonByForename["Bob"];
        Person bob2 = secondPersonByForename["Bob"];
        

        这个解决方案的缺点是两个地图相关并不明显,编程错误可能会导致两个地图不同步。

答案 1 :(得分:0)

HashMap中,如果您使用相同的密钥添加值,则HashMap会将现有密钥替换为最后一个值。 In the document of HashMap

public V put(K key, V value)

将指定的值与此地图中的指定键相关联。如果地图以前包含该键的映射,则替换旧值。

例如:

 HashMap map = new HashMap<String, String>();
 map.put("123", "1");
 map.put("123", "2");

在这种情况下,map大小为1(key =“123”,value =“2”)。

我认为您应该创建一个格式为“str1,str2,str3”的字符串,并将此字符串放入HashMap中。在接收值的表单中,使用String.split(“,”)来获取每个值。