Saltar al contenido

¿Cómo usar Collections.sort () en Java?

Este dilema se puede resolver de variadas formas, pero te mostramos la respuesta más completa en nuestra opinión.

Solución:

Utilice este método Collections.sort (List, Comparator). Implemente un Comparador y páselo a Collections.sort().

class RecipeCompare implements Comparator 

    @Override
    public int compare(Recipe o1, Recipe o2) 
        // write comparison logic here like below , it's just a sample
        return o1.getID().compareTo(o2.getID());
    

Entonces usa el Comparator como

Collections.sort(recipes,new RecipeCompare());

La respuesta dada por BOBO se puede simplificar utilizando Lambda Expressions:

Collections.sort(recipes, (Recipe r1, Recipe r2) ->
r1.getID().compareTo(r2.getID()));

También se introdujeron después de Java 8 los métodos de construcción del comparador en la interfaz Comparator. Usando estos, uno puede reducir aún más esto a 1:

recipes.sort(comparingInt(Recipe::getId));

1 Bloch, J. Java eficaz (3rd Edición). 2018. Ítem 42, p. 194.

Cree un comparador que acepte el modo de comparación en su constructor y pase diferentes modos para diferentes escenarios según sus requisitos

public class RecipeComparator implements Comparator 

public static final int COMPARE_BY_ID = 0;
public static final int COMPARE_BY_NAME = 1;

private int compare_mode = COMPARE_BY_NAME;

public RecipeComparator() 


public RecipeComparator(int compare_mode) 
    this.compare_mode = compare_mode;


@Override
public int compare(Recipe o1, Recipe o2) 
    switch (compare_mode) 
    case COMPARE_BY_ID:
        return o1.getId().compareTo(o2.getId());
    default:
        return o1.getInputRecipeName().compareTo(o2.getInputRecipeName());
    

En realidad, para los números, debe manejarlos por separado, verifique a continuación

public static void main(String[] args) 
    String string1 = "1";
    String string2 = "2";
    String string11 = "11";

    System.out.println(string1.compareTo(string2)); 
    System.out.println(string2.compareTo(string11));// expected -1 returns 1
   // to compare numbers you actually need to do something like this

    int number2 = Integer.valueOf(string1);
    int number11 = Integer.valueOf(string11);

    int compareTo = number2 > number11 ? 1 : (number2 < number11 ? -1 : 0) ;
    System.out.println(compareTo);// prints -1

Reseñas y valoraciones

Acuérdate de que tienes la capacidad de comentar tu experiencia si chocaste tu preocupación en el momento justo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *