如何根据优先级重新排列列表视图中的项目?
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());
我正在开发一个任务应用程序,我试图在其中设置一个列表视图。现在,我是一个初学者,所以我想问你如何将我所想的代码实现...
用户输入任务,还告诉我各个任务的优先级和耗时。现在,一旦用户输入所有数据,我想编写代码,按照优先级递减和时间递增的顺序重新排列所有数据。例如,一个具有高优先级但花费较少时间的任务必须列在第一位,等等......我尝试用列表项的索引做一些事情,但效果不太好。有什么办法可以解决这个问题吗?谢谢。
你不需要写那样的东西。查看 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());