如何在地图中随机播放元素,我正在寻找类似于Collections.shuffle
方法的内容。
答案 0 :(得分:32)
Map
实际上并没有像List
那样排序,这意味着您无法按索引访问Map
个项目。因此,洗牌一般没有意义。但你能做的就是这个(我省略了这个例子的泛型):
Map map = new HashMap();
// [...] fill the map
List keys = new ArrayList(map.keySet());
Collections.shuffle(keys);
for (Object o : keys) {
// Access keys/values in a random order
map.get(o);
}
答案 1 :(得分:6)
由于HashMap不会在其键中保留任何顺序(既不自然也不插入),因此无需对HashMap的键进行随机播放。如果我们讨论的是LinkedHashMap,它会维持插入顺序,这是有道理的。在这种情况下,您可以创建一个随机插入密钥的新LinkedHashMap。
然后,假设map是你的源映射(LinkedHashMap),这里是生成一个名为shuffleMap的新映射(LinkedHashMap)的代码,其中的密钥被洗牌。
List<Integer> list = new ArrayList<>(map.keySet());
Collections.shuffle(list);
Map<Integer, String> shuffleMap = new LinkedHashMap<>();
list.forEach(k->shuffleMap.put(k, map.get(k)));