如何根据优先级重新排列列表视图中的项目?

How to rearrange items in a list view according to their priority?

我正在开发一个任务应用程序,我试图在其中设置一个列表视图。现在,我是一个初学者,所以我想问你如何将我所想的代码实现...

用户输入任务,还告诉我各个任务的优先级和耗时。现在,一旦用户输入所有数据,我想编写代码,按照优先级递减和时间递增的顺序重新排列所有数据。例如,一个具有高优先级但花费较少时间的任务必须列在第一位,等等......我尝试用列表项的索引做一些事情,但效果不太好。有什么办法可以解决这个问题吗?谢谢。

你不需要写那样的东西。查看 PriorityQueue,它正是这样做的:

class 实现了 Iterator 接口,因此如果您不仅仅需要列表中最重要的元素,您将可以访问特定元素。

如果您需要更复杂的优先级比较,您可以使用自定义 compare 方法实现 Comparator

这应该提供您需要的所有功能。

想出一个执行排序的公式,例如

(((p / 2) * 100) * p)  + ((t / 2) * 100) * t) 
  • p - 优先级
  • t - 时间

在示例中优先级和时间具有相同的权重。

使用自定义比较器效果很好。我想出了一个简单的算法,其中涉及将简单整数(如 10、9 和 8)分别分配给优先级高、中和低,以及将 1、2 和 3 分配给时间。比较器只是从优先级中减去时间并将其用作比较参数。效果很好。这是比较器的代码 class :

package com.example.taskmasterv3;

import java.util.Comparator;

public class TaskComparator implements Comparator<SubtaskPartTwo> {

    public int compare(SubtaskPartTwo s1, SubtaskPartTwo s2){

        int a = s1.getPri() - s1.getTime();
        int b = s2.getPri() - s2.getTime();
        int x = s1.getPri();
        int y = s2.getPri();

        if (b == a){

            return y-x;

        }
        else {
            return b-a;
        }

    }
}

在列表适配器中使用以下代码行 class 使其工作:

// THIS IS WHERE I USE SORT
        Collections.sort(values, new TaskComparator());