2012-05-13 24 views
1

我想在HashMap中改變值。我有以下類型的HashMap在HashMap中改變值

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

我想在Map中洗牌。我會怎麼做?

以下是我的嘗試:

collections.shuffle(trainDataSet.values()); 

得到了一個錯誤:

Values cannot be cast to java.util.List 

是的,這是有意義的,因爲我的值在ArrayList中沒有列出。是否有可能洗牌arraylist的集合?

編輯

如果我有下面的順序::

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

成類似

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

我不知道我得到它,你想在地圖中的所有值做你想做的洗牌在地圖上每個桶每個列表,或和把他們放在隨機桶裏? – shem

+0

我想獲得地圖中的所有值並將它們放入隨機桶中。 – thetna

回答

11

你真的想重新關聯隨機鍵和值。下面是一個例子,如何能夠實現:

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));