在HashMap中混洗值

时间:2012-05-13 12:27:16

标签: java collections shuffle

我想在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]

3 个答案:

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