Cómo utilizar la Comparables CompareTo en las Cadenas de caracteres en Java

Puedo usar para ordenar por emp id pero no estoy seguro de si es posible comparar cadenas. Me sale un error que el operador no está definido para las cadenas.

public int compareTo(Emp i) {
            if (this.getName() == ((Emp ) i).getName())
                return 0;
            else if ((this.getName()) > ((Emp ) i).getName())
                return 1;
            else
                return -1;
  • Curioso, ¿por qué usted necesita para lanzar i a Emp cuando ya te has declarado a ser Emp en la firma del método?
InformationsquelleAutor Jack | 2010-09-20

5 Kommentare

  1. 47

    Lo que necesitas es usar el compareTo() método de Cadenas.

    return this.getName().compareTo(i.getName());

    Que debe hacer lo que quiera.

    Por lo general, cuando la aplicación de la Comparable interfaz, usted acaba de agregar los resultados de la utilización de otros Comparable los miembros de la clase.

    A continuación es bastante típico de la implementación de un compareTo() método:

    class Car implements Comparable<Car> {
        int year;
        String make, model;
        public int compareTo(Car other) {
            if (!this.make.equalsIgnoreCase(other.make))
                return this.make.compareTo(other.make);
            if (!this.model.equalsIgnoreCase(other.model))
                return this.model.compareTo(other.model);
            return this.year - other.year;
        }
    }
    • cuando me reemplace «else if ((este.getName()) > ((Emp ) i).getName())» con «else if (este.getName().compareTo(((Emp ) i).getName() > 0)», me sale un error similar, diciendo: operador > es anular la definición de tipo String,int
    • Eso es porque su > 0 está dentro de la llamada a compareTo(); necesita estar fuera de ese último paréntesis para comparar el valor de retorno de la cadena de comparación contra cero (y entonces usted necesita otro paréntesis para completar el else if condición).
    • probablemente, usted debe utilizar la versión del método que todo el mundo es lo que sugiere. Acaba de devolver directamente el valor de string.compareTo(string).
  2. 8

    Bastante seguro de que el código sólo puede ser escrita así:

    public int compareTo(Emp other)
    {
        return this.getName().compareTo(other.getName());
    }
    • Oh, ya veo. Debo haber sido confundido de conmutación de la comparación de enteros y de cadena y usa > signo. Gracias!!
  3. 5

    Java Cadena ya implementa Comparable. Así que usted podría simplemente escribir su método como

    public int compareTo(Emp emp) {
       return this.getName().compareTo(emp.getName());
    }

    (por supuesto, asegúrese de agregar adecuada validaciones como nulos cheques etc)

    También en el código, no trate de comparar Cadenas utilizando ‘==’. El uso de ‘igual a’ método en su lugar. ‘==’ sólo comparar la cadena de referencias, mientras que es igual semánticamente compara dos cadenas de caracteres.

  4. 3

    Usted no necesita cast i del plan de gestión ambiental, es ya una Emp:

    public int compareTo(Emp i) {
        return getName().compareTo(i.getName());
    }
  5. 1

    No

    if (this.getName() == ((Emp ) i).getName())

    ser

    if (this.getName().equals(i.getName()))

    • Como se indica por los demás, getName().compareTo(i.getName()); es una mejor opción de todos modos.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea