es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Java – Comparando 2 números decimales (flotantes o dobles)

Tengo un ArrayList que necesito ordenar por anchura, la cual se almacena como un float (.getWidth() devuelve un float).

arrayPlaceholder.sort((m1,m2) -> font.getWidth(m2.getDisplayName()) - font.getWidth(m1.getDisplayName()));

He buscado en la documentación y en el error que estoy recibiendo, y está claro que la función .compare() solo devuelve un int.

¿Hay alguna manera de comparar 2 floats (o doubles, ya que puedo convertir floats en doubles) en mi caso de uso? He visto otros mensajes, pero no quiero codificar este proceso.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, puedes comparar floats (o doubles, si los conviertes) en tu proceso de ordenamiento de ArrayList. Puedes definir un Comparator personalizado que tenga en cuenta el valor float obtenido usando el método .getWidth(). Aquí tienes un ejemplo:

    Comparator<myclass> widthComparator = new Comparator<myclass>() {
        @Override
        public int compare(MyClass o1, MyClass o2) {
            float width1 = o1.getWidth();
            float width2 = o2.getWidth();
            return Float.compare(width1, width2);
        }
    };
    
    arrayPlaceholder.sort(widthComparator);
    

    En este código, definimos un Comparator que toma dos objetos MyClass y obtiene su ancho utilizando el método .getWidth(). Luego, comparamos los dos anchos utilizando el método Float.compare(), que devuelve un valor positivo si width1 > width2, 0 si width1 == width2, o un valor negativo en caso contrario. Por último, ordenamos el ArrayList utilizando el Comparator personalizado.

    De esta manera, no tienes que codificar el proceso de comparación y puedes comparar floats (o doubles) de una manera más flexible.

Comments are closed.