Clasificar una matriz con tipo de objeto con una expresión lambda

takesuma:

Me encuentro con un problema que no entiendo. En el método de añadir en la clase Tabla Me gustaría utilizar:

Arrays.binarySearch(asso, (a,b) -> a.cle.compareTo(b.cle));

Donde Asso es mi serie de los objetos de asociación que contiene la clave y el valor.

Mediante la ejecución de este código con el tipo String, me sale un error "no puede encontrar el símbolo" en el método compareTo (Objeto).

Allí mi código:

prueba:

Table<String,String> table0 = new Table<String,String>(10);
table0.add("1","int");

método:

import java.util.Arrays;

public class Table<C,V>{

  Association[] asso;

  public Table(int n){
    asso = new Association[n];
  }

  public void add(C cle, V valeur){
    asso[0] = new Association<C,V>(cle,valeur);
    Arrays.sort(asso, (a,b) -> a.cle.compareTo(b.cle));
  }

  public class Association<C,V>{

    public C cle;
    public V valeur;

    public Association(C cle,V valeur){
      this.cle = cle;
      this.valeur = valeur;
    }
  }
}

Y el error:

../src/Table.java:15: error: cannot find symbol
Arrays.sort(asso, (a,b) -> a.cle.compareTo(b.cle));
                                ^
symbol:   method compareTo(Object)
location: variable cle of type C
where C is a type-variable:
C extends Object declared in class Table.Association

Gracias por tu ayuda.

Eran :

Añadir un tipo ligado al parámetro de tipo genérico C:

class Table<C extends Comparable<C>,V>

De lo contrario, el compilador no sabe que Clos implementos Comparable(y por lo tanto debe tener el compareTométodo).

Asimismo, no utilizar el tipo de prima ( Association[]) para la matriz. Utilizar:

Association<C,V>[] asso;

Pensándolo bien, pero pienso que deben tomar la Associationclase static:

public class Table<C extends Comparable<C>,V> {

    Association<C,V>[] asso;

    public Table(int n) {
        asso = new Association[n];
    }

    public void add(C cle, V valeur) {
        asso[0] = new Association<C,V>(cle,valeur);
        Arrays.sort(asso, (a,b) -> a.cle.compareTo(b.cle));
    }

    public static class Association<C,V> {

        public C cle;
        public V valeur;

        public Association(C cle,V valeur){
            this.cle = cle;
            this.valeur = valeur;
        }
    }
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=189004&siteId=1
Recomendado
Clasificación