我是Java的新手,我正在尝试创建一个Method(用于类项目),该方法基于作为参数提供的对象变量引用对数组进行排序。因此,如果对象变量引用名称'提供它将取代' sort_variable'使用' name',但如果' last_name'提供它将取代' sort_variable'使用' last_name'。
Roster[] sort (Roster [] array, String sort_variable){
Roster temp_player = new Roster();
for(int sort_iters = 0; sort_iters < array.length; sort_iters++) {
for(int index = 0; index < array.length-sort_iters - 1 ; index++) {
if (array[index].sort_variable.compareTo(array[index+1].sort_variable) < 0){
temp_player = array[index];
array[index] = array[index+1];
array[index+1] = temp_player;
主要是我:
String sort_variable = "name";
array = sort(array, sort_variable);
我似乎无法获得
array[index].sort_variable
有效地成为
array[index].name
我应该注意,我得到的错误是: 错误:找不到符号
if(array[index].sort_variable.compareTo(array[index+1].sort_variable) < 0){
^
我想我想知道这是一个简单的事情,我只是错了,或者它是否可能超出初学者阶段?如果简单的指针会很棒。我搜索过的任何东西都没有让我知道我所缺少的东西。 提前谢谢。
答案 0 :(得分:3)
你需要使用反射来做到这一点,在99%的情况下,这是一个坏主意。 Java不按字符串名称访问属性和方法。但它有lambda表达式和方法引用。您的方法应该接受一个将名单转换为姓氏的函数,而不是使用String。然后代码将缩减为
Arrays.asList(array).sort(Comparator.comparing(function));
例如:
Arrays.asList(array).sort(Comparator.comparing(Roster::getLastName));
或者,如果lastName是公共字段(这将是糟糕的设计)
Arrays.asList(array).sort(Comparator.comparing(roster -> roster.lastName));
答案 1 :(得分:2)
您可以将sort_variable
映射到enum
(或使用切换语句),并使用与Comparable
相关联的enum
进行排序。
以下是这个想法的大纲:
class Roster {
String lastName, firstName;
String getFirstName() {
return firstName;
}
String getLastName() {
return lastName;
}
}
enum SortOrder {
firstName(Comparator.comparing(Roster::getFirstName)),
lastName(Comparator.comparing(Roster::getLastName));
final Comparator<Roster> comparator;
SortOrder(Comparator<Roster> comparator) {
this.comparator = comparator;
}
}
Roster[] sort(Roster [] array, String sort_variable) {
SortOrder sortOrder = SortOrder.valueOf(sort_variable);
Arrays.sort(array, sortOrder.comparator);
return array;
}
答案 2 :(得分:0)
您可以使用struct bucket * hashtable;
API动态获取属性值。以下是基于给定属性进行排序的代码段。请注意,您需要处理hashtable
块中的commons-beanutils
值。
null
https://mvnrepository.com/artifact/commons-beanutils/commons-beanutils