我想在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中不在List中。是否有可能改组arraylist集合?
修改
如果我有以下订单::
key1 [aa,bb,cd]
key2 [xx,xy,sfr]
像
这样的东西key1 [xx,xy,sfr]
key2 [aa,bb,cd]
答案 0 :(得分:12)
您实际上想要随机重新关联键和值。以下是如何实现这一目标的示例:
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 :(得分: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);
}
}
答案 2 :(得分:1)
这对我有用:
Collections.shuffle(Arrays.asList(trainDataSet));