0

2つのハッシュマップがあり、3番目のハッシュマップに入力したいと思います。キーは最初のハッシュマップの値になり、値は配列に分割された2番目のハッシュマップの値になります。すなわち:

hashmap1 = {1=e1, 2=e2}
hashmap2 = {10=word1-word2-word3, 20=word4-word5-word6}
the result:
hashmap3 = {e1=word1-word2-word3, e2=word4-word5-word6}

これは私がこれまでにしたことです:

  static HashMap<Integer, String> catnamecatkeys = new HashMap<Integer, String>();

    static HashMap<Integer, String> keywords = new HashMap<Integer, String>();

    static HashMap<String, String> tempHash = new HashMap<String, String>();

    static HashMap<String, String[]> hash = new HashMap<String, String[]>();

    static String[] arr;

    public static void main(String[] args) {

    catnamecatkeys.put(1, "e1");
    catnamecatkeys.put(2, "e2");
    keywords.put(1, "word1-word2-word3");
    keywords.put(2, "word4-word5-word6");

    for (int key : catnamecatkeys.keySet()) {
        tempHash.put(catnamecatkeys.get(key),null);
    }

    for(String tempkey: tempHash.keySet()){          
        tempHash.put(tempkey,keywords.entrySet().iterator().next().getValue());
        arr = tempHash.get(tempkey).split("-");
        hash.put(tempkey, arr);
    }
    System.out.println(tempHash);
    for (String hashkey : hash.keySet()) {
        for (int i = 0; i < arr.length; i++) {
            System.out.println(hashkey + ":" + hash.get(hashkey)[i]);
        }


       }

    }

しかし、出力は次のとおりです。

hashmap3 = {e1=word1-word2-word3, e2=word1-word2-word3}

何かアイデアはありますか?

4

3 に答える 3

1

あなたの問題はこの行です:

keywords.entrySet().iterator().next().getValue()

常にkeywordsHashMap の同じエントリを返します。次のような方法で新しいハッシュマップを作成してみてください。

for (int i = 1; i < 3; i++) {
    tempHash.put(catnamecatkeys.get(i), keywords.get(i));
}
于 2012-04-05T17:56:40.920 に答える
1

ループの外で Iterator を初期化する必要があります。ここに完全な例があります -

static HashMap<Integer, String> catnamecatkeys = new HashMap<Integer, String>();

static HashMap<Integer, String> keywords = new HashMap<Integer, String>();

static HashMap<String, String> tempHash = new HashMap<String, String>();

static HashMap<String, String[]> hash = new HashMap<String, String[]>();

static String[] arr;
public static void main(String[] agrs)
{     
   catnamecatkeys.put(1, "e1");
        catnamecatkeys.put(2, "e2");
        keywords.put(1, "word1-word2-word3");
        keywords.put(2, "word4-word5-word6");

        for (int key : catnamecatkeys.keySet()) {
            tempHash.put(catnamecatkeys.get(key),null);
        }
     Set<Entry<Integer,String>> set =  keywords.entrySet();
      Iterator<Entry<Integer, String>>  iterator= set.iterator();
        for(String tempkey: tempHash.keySet()){          
            tempHash.put(tempkey,iterator.next().getValue());
            arr = tempHash.get(tempkey).split("-");
            hash.put(tempkey, arr);
        }
        System.out.println(tempHash);
        for (String hashkey : hash.keySet()) {
            for (int i = 0; i < arr.length; i++) {
                System.out.println(hashkey + ":" + hash.get(hashkey)[i]);
            }


           }
}
于 2012-04-05T18:04:16.730 に答える
0

あなたが持っているあなたの例によると:

hashmap1 = {1=e1, 2=e2}
hashmap2 = {10=word1-word2-word3, 20=word4-word5-word6}
the result:
hashmap3 = {e1=word1-word2-word3, e2=word4-word5-word6}

hashmap1 と hashmap2 の間に共通のキーがないため、キー "1" を持つ hashmap1 の値を、キー "10" を持つ hashmap2 の値に関連付けようとしています。エントリを hashmap1 から hashmap2 にマップする方法に関する追加情報が保持されていない限り、これを行う方法はありません。反復順序が挿入順序と同じであることを保証するマップ (LinkedHashMap など) が使用されている場合、この追加情報はマップへの挿入順序である可能性があります。

于 2012-04-05T20:20:18.433 に答える