Sortiert ein typisiertes Array von Objekt mit einem Lambda-Ausdruck

takesuma:

Ich laufe in ein Problem, dass ich nicht verstehe. Bei dem Verfahren in der Tabelle Klasse der Zugabe würde ich gerne verwenden:

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

Wo Asso ist mein Array of Association den Schlüssel und die Wertobjekte enthält.

Durch die Ausführung dieses Codes mit dem Typ String, erhalte ich einen Fehler auf der Methode compareTo (Object) „kann nicht Symbol finden“.

Es meinen Code:

Prüfung:

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

Methode:

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;
    }
  }
}

Und der Fehler:

../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

Danke für deine Hilfe.

Sie waren:

Fügen Sie einen Typ mit dem generischen Typparameter gebunden C:

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

Andernfalls wird der Compiler nicht weiß , dass CGeräte Comparable(und deshalb müssen die haben compareToMethode).

Verwenden Sie auch nicht roh - Typ ( Association[]) für das Array. Verwenden:

Association<C,V>[] asso;

Am zweiten Gedanken, empfehle ich Ihnen auch die machen AssociationKlasse 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;
        }
    }
}

Ich denke du magst

Origin http://43.154.161.224:23101/article/api/json?id=188997&siteId=1
Empfohlen
Rangfolge