2012-05-13 2 views
1

HashMap에서 값을 임의로 섞기를 원합니다. 다음 유형의 HashMap이 있습니다HashMap의 값을 셔플 링

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

맵의 값을 임의로 바꾸고 싶습니다. 내가 어떻게 할거야?

collections.shuffle(trainDataSet.values()); 

에 오류가있어 : 다음

내 시도

Values cannot be cast to java.util.List 

예이 메이크업 감각, 나의 값의 ArrayList에 있기 때문에하지 목록입니다. arraylist 컬렉션을 뒤섞을 수 있습니까?

편집

난 당신이 실제로 무작위로 키와 값을 다시 연결하려는

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