java - 对以前未知元素的列表进行排序 (List<?>)

标签 java sorting generics quicksort

我正在实现一个泛型类作为我的服务类的基类,我应该为我的应用程序中的每个实体类都有一个。除了用于插入、更新或删除项目的方法(都已经完成)之外,我还有一个返回项目列表的方法,我需要在其中对这个列表进行排序,并返回对应于可变大小元素的一页的子集。

我的问题与排序过程有关,我现在有这个实现:

protected List<E> ordenaLista(List<E> lista, int ordem) {
    return this.quick_sort(lista, 0, lista.size());
}

protected List<E> quick_sort(List<E> v,int ini, int fim) {
    int meio;

    if (ini < fim) {
        meio = partition(v, ini, fim);
        quick_sort(v, ini, meio);
        quick_sort(v, meio + 1, fim);
    }

    return v;
}

protected int partition(List<E> v , int ini, int fim) {
    E pivo;
    pivo = v.get(ini);
    int topo = ini;

    for (int i = ini + 1; i <= fim; i++) {
        int result = v.get(i).toString().compareTo(pivo.toString());
        if (result > 0) {
            v.set(topo, v.get(i));
            v.set(i, v.get(topo+1));
            topo++;
        }
    }

此代码仅在列表只有基本元素(Integer 或 Float)时才有效,但我将拥有的是我项目中的实体类之一,而不是 E。在这种情况下,我应该将 (v.get(i).toString().compareTo(pivo.toString())) 与每个类的属性进行比较。以及更多,使用 ordem 指示的属性,它表示属性的“位置”,如下所示:

实体:Usuario 属性:login、senha、pnome、uno​​me、email Ordem: 1=login, 2=senha, 3=pnome, 4=unome, 5=email

任何人都可以指出实现该目标的方向吗?

最佳答案

让你的实体类实现Comparable . 因此你将拥有

v.get(i).compareTo(pivo)

代替

v.get(i).toString().compareTo(pivo.toString());

关于java - 对以前未知元素的列表进行排序 (List<?>),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24174525/

相关文章:

java - 对数组值进行排序,使其对应于其他正在排序的数组(当它实际上未更改时)

java - 在泛型类型 "T"的对象和泛型类型 "<T extends Comparable<T>>"的对象之间进行转换

java - 为什么不能用Java声明Monad接口(interface)?

java - 更新 Maven 在 Eclipse 中从 Java JDK 1.8 恢复到 JavaSE -1.8

javascript - JS中对象的频率排序数组,如果频率匹配则根据对象属性排序

php - 在 PHP 中使用 array_unique 后重新计算键的方法

java - 泛型在 Java 中被忽略

java - 如何将 ZonedDateTime 格式设置为 yyyy-MM-ddZ

java - 为什么我的鱼不转头?

java - DecimalFormat 未正确格式化我的数字