java - tipos - valor bases de datos
La mejor estructura para la lista de clave-valor(entero, cadena) que se barajará (3)
Cree una clase Pair
, que contiene tanto el Integer
como la String
y luego agregue múltiples Objetos de Pair
a una Lista, que se mezclará.
public class Pair {
private Integer integer;
private String string;
//accessors
}
Entonces:
List<Pair> list = new ArrayList<Pair>();
//...add some Pair objects to the list
Collections.shuffle(list);
Necesito implementar una estructura en Java que sea una lista de valores-clave (de tipos Entero-Cadena) y quiero barajarla.
Básicamente, me gustaría hacer algo así.
public LinkedHashMap<Integer, String> getQuestionOptionsMap(){
LinkedHashMap<Integer, String> shuffle = new LinkedHashMap<Integer, String> ();
if (answer1 != null)
shuffle.put(new Integer(1), answer1);
if (answer2 != null)
shuffle.put(new Integer(2), answer2);
if (answer3 != null)
shuffle.put(new Integer(3), answer3);
if (answer4 != null)
shuffle.put(new Integer(4), answer4);
Collections.shuffle(shuffle);
return shuffle;
}
Sin embargo, HashMap no se puede barajar.
Pude obtener aleatoriamente una clave del hashmap y luego devolver el elemento vinculado, pero estoy seguro de que esta no es la mejor solución para mi problema.
¿Hay alguna forma mejor?
Gracias por adelantado.
Puede mantener una List
separada de los valores clave, mezclarlos y usarlos para acceder al HashMap
.
List<Integer> keys = new ArrayList<Integer>(map.keySet());
Collections.shuffle(keys);
for(Integer i : keys)
map.get(i); // Gets the values in the shuffled order
Puedes guardar el mapa. El mapa está diseñado para buscarse por clave, así que sugiero que tengas una lista de claves barajadas.
public Map<Integer, String> getQuestionOptionsMap() {
Map<Integer, String> map = new HashMap<>();
String[] answers = {null, answer1, answer2, answer3, answer4};
for (int i = 1; i < answers.length; i++)
if (answers[i] != null)
map.put(i, answers[i]);
List<Integer> order = new ArrayList<>(map.keySet());
Collections.shuffle(order);
Map<Integer, String> shuffled = new LinkedHashMap<>();
for (Integer key : order)
shuffled.put(key, map.get(key));
return shuffled;
}