Java方法可以根据带有对象变量引用的参数对数组进行排序吗?

时间:2017-11-02 21:08:22

标签: java arrays sorting methods

我是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){
                   ^

我想我想知道这是一个简单的事情,我只是错了,或者它是否可能超出初学者阶段?如果简单的指针会很棒。我搜索过的任何东西都没有让我知道我所缺少的东西。 提前谢谢。

3 个答案:

答案 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