如何根据优先级重新排列列表视图中的项目?
Posted
技术标签:
【中文标题】如何根据优先级重新排列列表视图中的项目?【英文标题】:How to rearrange items in a list view according to their priority? 【发布时间】:2021-10-05 02:18:24 【问题描述】:我正在开发一个任务应用程序,我正在尝试设置一个列表视图。现在,我有点初学者,所以我想问你如何将我的想法实现为代码......
用户输入任务,并告诉我各个任务的优先级和花费的时间。现在,一旦用户输入所有数据,我想编写代码,按照优先级降低和时间增加的顺序重新排列所有数据。例如,一个具有高优先级但花费较少时间的任务必须列在第一位,依此类推……我尝试使用列表项的索引来做一些事情,但效果不佳。有什么办法可以解决这个问题吗?谢谢。
【问题讨论】:
如果您对列表的数据集进行排序,那么列表应该/将被更新。你试过什么,代码是什么?你看到了什么行为? 我尝试使用大量 if-else 语句...例如,如果(优先级高),然后是它的组合...但是我自己查看所有可能的组合是不可能的,因为大约有 3 ! em 这是一个编程站点,因此,我们希望能够看到您的代码以提供帮助。你累了什么?使用 Comparator 进行比较,对数据集进行排序似乎就足够了 @Bonatti 是的,我明白了。我能够做到。我没有使用优先队列,比较器工作得很好。我创建了一个自定义的...我现在将发布答案 【参考方案1】:你不需要写那样的东西。查看PriorityQueue
,它就是这样做的:
该类实现了Iterator
接口,因此如果您不仅需要列表中最重要的元素,您还可以访问特定元素。
如果您需要更复杂的优先级比较,您可以使用自定义 compare
方法实现 Comparator
:
这应该提供您需要的所有功能。
【讨论】:
对。我想我会尝试 Priority queue ,因为它与我想要的非常匹配【参考方案2】:使用自定义比较器效果很好。我想出了一个简单的算法,它涉及将简单的整数(如 10、9 和 8)分别分配给优先级高、中和低,并将 1、2 和 3 分配给时间。比较器只是从优先级中减去时间并将其用作比较参数。效果很好。这是比较器类的代码:
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;
在 List Adapter 类中使用以下代码行使其工作:
// THIS IS WHERE I USE SORT
Collections.sort(values, new TaskComparator());
【讨论】:
【参考方案3】:想出一个执行排序的公式,例如:
(((p / 2) * 100) * p) + ((t / 2) * 100) * t)
p
- 优先级
t
- 时间
在示例中,优先级和时间具有相同的权重。
【讨论】:
不确定我能否正确理解公式...,抱歉。以上是关于如何根据优先级重新排列列表视图中的项目?的主要内容,如果未能解决你的问题,请参考以下文章
如何重新排列 UILocalNotification 表格视图的单元格?