2017-03-20 13 views
0

文字列型のハッシュマップに項目のコレクションを追加しようとしています。 コレクションを反復処理し、値がハッシュマップにない場合はマップに追加し、それがある場合は、値を1ずつ増やすのではなく、1ずつ増やします。ここまでは私のコードです。ハッシュマップのarraylistの値にアクセスし、値を編集します。

HashMap内のArrayListに格納された整数にアクセスして1ずつ増やすにはどうすればよいですか?

ご協力いただきますようお願い申し上げます。ありがとうございます。

マップにそのマップを印刷しようとしていた場合、マップを繰り返して正しい値を印刷するにはどうすればよいですか。これまでのところ私はこのコードを持っています:

for (Map.Entry<String, String> entry : map.entrySet()) 
{ 
System.out.println(entry.getKey() + "/" + entry.getValue()); 
ArrayList<Integer> l = map.get(p.title); 
%> 

<tr> 
    <td> <%out.println(map.getKey);%></td> 
    <td> <%out.println(l.get(0);%></td> 
    <td> <%out.println(l.get(1));%></td> 
</tr> 
<%  
} 
%> 

私はそれがコレクションではなく地図では印刷されるようになっています。

+0

「p.title」を取得するとよいでしょう。しかし、1秒間、地図を忘れてしまいます。あなたがそれを持っていたと仮定して、Arraylistをどのように更新しますか?言い換えれば、あなたは2つのことを求めているので、1つだけに焦点を当てます。 –

答えて

3

あなたがキーp.titleの値を取得し、リストに1を追加する必要があります。

HashMap<String, ArrayList<Integer>> map = new HashMap<String, ArrayList<Integer>>(); 
    Collection items1 = basket.getItems(); 
    for (Iterator i = items1.iterator(); i.hasNext();) { 
     Product p = (Product) i.next(); 

     if(map.containsKey(p.title)) { 
      ArrayList<Integer> list = map.get(p.title); 
      list.set(1, list.get(1) + 1); 
      map.put(p.title, list); 
     } 
     else { 
      ArrayList<Integer> list = new ArrayList<Integer>(); 
      list.add(p.price); 
      list.add(1); 
      map.put(p.title,list); 
     } 
    } 

たぶん、あなたもすることができます:

HashMap<String, ArrayList<Integer>> map = new HashMap<String, ArrayList<Integer>>(); 
    Collection items1 = basket.getItems(); 
    for (Iterator i = items1.iterator(); i.hasNext();) { 
     Product p = (Product) i.next(); 

     ArrayList<Integer> list = map.get(p.title); 

     if (list == null) { 
      list = new ArrayList<Integer>(); 
      list.add(p.price); 
      list.add(1); 
     } else { 
      list.set(1, list.get(1) + 1); 
     } 
     map.put(p.title, list); 
    } 
+0

あなたの返事ありがとうございます。代わりに、既にリストにある1に1を追加したいので、2ではない1になるようにします。1をどのように増やすのですか?そうすれば、ハッシュマップ内の値は NLee57

+0

となります。絶対完璧な仲間です。ありがとうございます。 – NLee57

+0

私は新しい問題に遭遇しました、どんな助けもありがとう、ありがとう。 – NLee57

0

これはuのを助けるかもしれないが、私は、Uを提案配列リストのリンクリストを使用する

if(map.containsKey(p.title)) { 
    ArrayList<Integer> list=map.get(p.title); 
    list.get(1)=list.get(1)+1; 
    map.put(p.title,list); 
} 
0

私はこれを行うべきだと思います。

マップに一致するキーがある場合はArrayListを取得し、リスト内の2番目のインデックスの整数を増やす必要があります。これは、商品価格を最初のインデックス(インデックス0) 2番目のインデックス(インデックス1)に "count"を格納したいようです。

HashMap<String, ArrayList<Integer>> map = new HashMap<String, ArrayList<Integer>>(); 
     Collection items1 = basket.getItems(); 
     for (Iterator i = items1.iterator(); i.hasNext();) { 
      Product p = (Product) i.next(); 
      if(map.containsKey(p.title)) { 
       // get the list of the existing product in the hash map 
       ArrayList<Integer> listForProduct = map.get(p.title)); 

       // get one of the integers in the list (the integer at index one, because index zero is the price) 
       int intInList = listForP.get(0); 

       // increment this integer and put it back at index one in the list 
       listForP.add(1, intInList + 1); 
      } 
      else { 
       ArrayList<Integer> list = new ArrayList<Integer>(); 
       list.add(p.price); 
       list.add(1); 
       map.put(p.title,list); 
      } 
     } 
関連する問題