Here the important thing is to use the Collection.shuffle to mess up the list, I also created a DTO called QuestionResponseDTO, what I do first is to generate the list with the questions (QuestionResponseDTO), then iterate over the list and obtain a random element at a time, and then remove the random element from the list I already got and do not repeat .
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
public class Test {
public static void main(String[] args) {
List<PreguntaRespuestaDTO> preguntas = new ArrayList<PreguntaRespuestaDTO>();
PreguntaRespuestaDTO preguntaRespuestaDTOA = new PreguntaRespuestaDTO();
preguntaRespuestaDTOA.setNoPregunta("A");
preguntaRespuestaDTOA.setPregunta("¿Actaulmente estas trabajando?");
preguntas.add(preguntaRespuestaDTOA);
PreguntaRespuestaDTO preguntaRespuestaDTOB = new PreguntaRespuestaDTO();
preguntaRespuestaDTOB.setNoPregunta("B");
preguntaRespuestaDTOB.setPregunta("¿Tienes auto?");
preguntas.add(preguntaRespuestaDTOB);
PreguntaRespuestaDTO preguntaRespuestaDTOC = new PreguntaRespuestaDTO();
preguntaRespuestaDTOC.setNoPregunta("C");
preguntaRespuestaDTOC.setPregunta("¿Tienes casa propia?");
preguntas.add(preguntaRespuestaDTOC);
PreguntaRespuestaDTO preguntaRespuestaDTOD = new PreguntaRespuestaDTO();
preguntaRespuestaDTOD.setNoPregunta("D");
preguntaRespuestaDTOD.setPregunta("¿Eres casado?");
preguntas.add(preguntaRespuestaDTOD);
PreguntaRespuestaDTO preguntaRespuestaDTOE = new PreguntaRespuestaDTO();
preguntaRespuestaDTOE.setNoPregunta("E");
preguntaRespuestaDTOE.setPregunta("¿Tienes hijos?");
preguntas.add(preguntaRespuestaDTOE);
List<PreguntaRespuestaDTO> listaReducida = preguntas;
PreguntaRespuestaDTO preguntaRandom = null;
for(int indice= 0; indice<preguntas.size(); indice++){
//Se obtiene una pregunta random
preguntaRandom = Test.obtenerRespuestaRandom(listaReducida);
//Se elimina ese elemnto de la lista el elemento random que se obtuvo
listaReducida = Test.obtenerListaReducida(listaReducida,preguntaRandom);
//Se imprime la pregunta
System.out.println(preguntaRandom.getNoPregunta()+" "+preguntaRandom.getPregunta());
}
}
public static PreguntaRespuestaDTO obtenerRespuestaRandom(List<PreguntaRespuestaDTO> preguntas){
Random randomGenerator = new Random();
//Se genera el random
int index = randomGenerator.nextInt(preguntas.size());
if (preguntas.size() == 0) return null;
//Se desordena la lista
Collections.shuffle(preguntas);
//se obtiene el indice de la lista
PreguntaRespuestaDTO preguntaRespuestaDTO = preguntas.get(index);
return preguntaRespuestaDTO;
}
public static List<PreguntaRespuestaDTO> obtenerListaReducida(List<PreguntaRespuestaDTO> listaReducida, PreguntaRespuestaDTO preguntaAEliminar){
List<PreguntaRespuestaDTO> nuevaLista = new ArrayList<PreguntaRespuestaDTO>();
for(PreguntaRespuestaDTO pregunta:listaReducida){
//Solo se agregan a la nueva lista los demás elementos
if(!pregunta.getNoPregunta().equals(preguntaAEliminar.getNoPregunta())){
nuevaLista.add(pregunta);
}
}
return nuevaLista;
}
}
class PreguntaRespuestaDTO {
private String noPregunta;
private String pregunta;
private boolean respuesta;
/**
* @return the noPregunta
*/
public String getNoPregunta() {
return noPregunta;
}
/**
* @param noPregunta
* the noPregunta to set
*/
public void setNoPregunta(String noPregunta) {
this.noPregunta = noPregunta;
}
/**
* @return the pregunta
*/
public String getPregunta() {
return pregunta;
}
/**
* @param pregunta
* the pregunta to set
*/
public void setPregunta(String pregunta) {
this.pregunta = pregunta;
}
/**
* @return the respuesta
*/
public boolean isRespuesta() {
return respuesta;
}
/**
* @param respuesta
* the respuesta to set
*/
public void setRespuesta(boolean respuesta) {
this.respuesta = respuesta;
}
}
This is the result:
E Do you have children?
C Do you have your own home?
B Do you have a car?
D Are you married?
A Are you currently working?
Note: Each time it is run, it returns the questions in a different order.