Wie mischt man Elemente in einer Map, ich suche nach etwas ähnlichem wie die Collections.shuffle
Methode.
Antworten
Zu viele Anzeigen?A Map
ist nicht wirklich geordnet wie ein List
was bedeutet, dass Sie keinen Zugriff auf Map
Artikel nach Index. Daher macht das Mischen im Allgemeinen keinen Sinn. Aber was Sie tun könnten, ist dies (ich habe für das Beispiel Generika weggelassen):
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);
}
Es macht keinen Sinn, die Schlüssel der HashMap zu mischen, da die HashMap keine Reihenfolge (weder natürlich noch einfügen) in ihren Schlüsseln beibehält. Die Frage macht Sinn, wenn es sich um eine LinkedHashMap handelt, die die Einfügereihenfolge beibehält. In einem solchen Fall können Sie eine neue LinkedHashMap erstellen, bei der die Schlüssel zufällig eingefügt werden.
Dann, vorausgesetzt, dass die Karte Ihre Quellkarte (LinkedHashMap) ist, hier der Code, um eine neue Karte (LinkedHashMap) mit dem Namen shuffleMap zu erzeugen, wobei die Schlüssel gemischt werden.
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)));