首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用lambda表达式对对象的类型化数组进行排序。

使用lambda表达式对对象的类型化数组进行排序。
EN

Stack Overflow用户
提问于 2018-12-06 11:10:42
回答 1查看 387关注 0票数 4

我遇到了一个我不明白的问题。在添加表类的方法中,我想使用:

代码语言:javascript
复制
Arrays.binarySearch(asso, (a,b) -> a.cle.compareTo(b.cle));

其中asso是包含键和值的关联对象数组。

通过使用类型字符串执行此代码,我在方法compareTo(Object)上得到一个“找不到符号”的错误。

这是我的代码:

测试:

代码语言:javascript
复制
Table<String,String> table0 = new Table<String,String>(10);
table0.add("1","int");

方法:

代码语言:javascript
复制
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;
    }
  }
}

而错误是:

代码语言:javascript
复制
../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

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-06 11:13:53

添加绑定到泛型类型参数C的类型

代码语言:javascript
复制
class Table<C extends Comparable<C>,V>

否则编译器不知道C实现了Comparable (因此必须有compareTo方法)。

也不要对数组使用原始类型(Association[])。使用:

代码语言:javascript
复制
Association<C,V>[] asso;

再想一想,我还建议您将Association类设置为static

代码语言:javascript
复制
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;
        }
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53650103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档