gpt4 book ai didi

java - 使用 lambda 表达式对类型化对象数组进行排序

转载 作者:搜寻专家 更新时间:2023-11-01 02:57:05 26 4
gpt4 key购买 nike

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

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

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

通过使用 String 类型执行此代码,我在方法 compareTo(Object) 上收到错误“找不到符号”。

这是我的代码:

测试:

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

方法:

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

错误:

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

感谢您的帮助。

最佳答案

添加绑定(bind)到泛型类型参数的类型 C:

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

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

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

Association<C,V>[] asso;

再三考虑,我还建议您将 Association 类设置为 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;
}
}
}

关于java - 使用 lambda 表达式对类型化对象数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53650103/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com