Social

miércoles, 11 de diciembre de 2013

Java: Ordenar un ArrayList

Para colocar los elementos de una lista en orden dentro de un ArrayList se puede utilizar la clase Collections. El siguiente código muestra el resultado de utilizar el método sort() de la clase Collections en un ArrayList:




En la primera parte se puede observar que con objetos del tipo String al utilizar el método sort con un List nos permite ordenar alfabéticamente los elementos sin mucho problema.

Luego se observa la forma de ordenar por medio de atributos de un objeto. Primero se muestra ordenando el objeto Hijo por medio de fechas (que pueden ser de nacimiento, registro, etc.) y luego se ordena la lista por medio de la edad.

Aquí se puede observar la clase Hijo:



De esta forma se facilita mucho ordenar objetos por medio de uno de sus atributos.

8 comentarios :

  1. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  2. y si es float, como se realizaria?

    rubencarabias.primerob@gmail.com
    gracias y un saludo!

    ResponderEliminar
    Respuestas
    1. Si utilizas un Float como objeto no debes realizar ningun cambio, pero si necesitas utilizar un float primitivo el comparador deber ir como se muestra a continuación:

      Collections.sort(listaFloats, new Comparator(){

      @Override
      public int compare(float o1, float o2) {
      if(o1 == o2){
      return 0;
      }
      else if(o1 >= o2){
      return 1;
      }
      else{
      return -1;
      }

      }

      });

      Eliminar
  3. ahora bien si se necesita ordenar la lista hijo por nombre como seria??

    ResponderEliminar
    Respuestas
    1. Hola. En este caso dentro del método compare(Hijo o1, Hijo o2) se debería realizar la siguiente comparación o1.getNombre().compareTo(o2.getNombre());

      Eliminar
  4. Hola, y si quiero ordenar por un campo BigDecimal,como sería?

    ResponderEliminar
  5. como filtrarias el arreglo implementadonto un texedit tomando como ejmplo:
    List hijos = new ArrayList();
    hijos.add(new Hijo("Paco", "Perez", 20, new Date(11000)));
    hijos.add(new Hijo("Pepe", "Argeta", 23, new Date(9000)));
    hijos.add(new Hijo("Zulma", "Estrada", 18, new Date(10000)));


    y en el texedit digito apellidos como "perez"

    ResponderEliminar
    Respuestas
    1. En ese caso no quieres ordenar pero obtener la lista filtrada. Puedes recorrer el array y luego obtener los valoresq ue te interesan. Por ejemplo:

      List result = new ArrayList<>();
      for (Hijo hijo : hijos) {
      if (valorDelTextEdit.contains(hijo.getApellido())) {
      result.add(hijo);
      }
      }

      Result tendria los deseado.

      Eliminar