2012-05-13 31 views
1

HashMapの値をシャッフルしたいと思います。私は以下の型のHashMapを持っていますHashMapの値をシャッフルする

Map<Integer,ArrayList<String> > trainDataSet = new HashMap<Integer, ArrayList<String>>(); 

マップの値をシャッフルしたいと思います。どうすればいい?私の試みである続き

collections.shuffle(trainDataSet.values()); 

はエラーを得た:私の値はArrayListのではないリストであるため

Values cannot be cast to java.util.List 

はい、これは、意味をなさない。 arraylistのコレクションをシャッフルすることは可能でしょうか?

EDIT

私はあなたが実際にランダムにキーと値を再関連付けしたい

key1 [xx,xy,sfr] 
key2 [aa,bb,cd] 
+0

私はそれを得るわからないんだけど、あなたはマップ内の各バケットに各リストをシャッフルしたい、またはあなたにマップ内のすべての値を取得したい、とそれらをランダムなバケツに入れますか? – shem

+0

私はマップのすべての値を取得し、ランダムなバケットに入れたいと思います。 – thetna

答えて

11

のようなものに::順

key1 [aa,bb,cd] 
key2 [xx,xy,sfr] 

を以下している場合。ここではそれを実現する方法の例です:

final Map<String, Object> x = new HashMap<String, Object>(); 
x.put("x", 1); x.put("y", 2); x.put("z", 3); x.put("w", 4); 
System.out.println(x); 
final List<Object> vs = new ArrayList<Object>(x.values()); 
Collections.shuffle(vs); 
System.out.println(vs); 
final Iterator<Object> vIter = vs.iterator(); 
for (String k : x.keySet()) x.put(k, vIter.next()); 
System.out.println(x); 
1

元の質問での私のコメントにあなたの応答に応じて、ここにあなたがマップ内のすべての値を取得し、ランダムバケツに

Random random = new Random(); 
    Map<Integer,ArrayList<String> > shuffled = new HashMap<Integer, ArrayList<String>>(); 
    ArrayList<Integer> keys = new ArrayList<Integer>(trainDataSet.keySet()); 
    for (Integer key : keys) { 
     shuffled.put(key, new ArrayList<String>()); 
    } 
    for (ArrayList<String> values : trainDataSet.values()) { 
     for (String string : values) { 
      Integer randomKey = random.nextInt(keys.size()); 
      ArrayList<String> list = shuffled.get(randomKey); 
      list.add(string); 
      shuffled.put(randomKey, list); 
     } 
    } 
それらを置くことができる方法であります
1

これが私の作品:

Collections.shuffle(Arrays.asList(trainDataSet)); 
関連する問題