gpt4 book ai didi

java - 如何重新排序对象列表?

转载 作者:行者123 更新时间:2023-11-29 03:45:36 25 4
gpt4 key购买 nike

首先,这听起来像是家庭作业,但事实并非如此。这只是我在工作中试图解决的一个问题。

我有一个对象列表,这些对象有一个序列号,表示它们在 UI 列表中的顺序。示例:

public class Task {
Long id;
String name;
Long seq;
}

我的 UI 中的表格在表格的每一行都有“向上”和“向下”链接,用于在列表中上下移动任务。

我正在实现两种方法来处理重新排序。这些方法由 Web UI 中的 ajax 调用。

public void incTaskSeq(List<Task> allTasks, Task taskToMove)

例如;如果我有 t1.seq=1, t2.seq=2, t3.seq=3, t4.seq=4, t5.seq=5 并且我想增加 t3 的位置,那么 t3.seq 变为 4,并且t4.seq 必须变成 3。

public void decTaskSeq(List<Task> allTasks, Task taskToMove)

同样;如果我有 t1.seq=1, t2.seq=2, t4.seq=3, t3.seq=4, t5.seq=5 并且我想减少 t4 的位置,那么 t4.seq 变为 2,并且t2.seq 必须变为 3。导致:

t1.seq=1, t4.seq=2, t2.seq=3, t3.seq=4, t5.seq=5

我对执行此操作的最佳方法有点困惑。

我想把所有的任务都放在一个 HashMap 中,然后按序列号对映射进行排序。然后定位到map中的taskToMove,改变sequence number,然后改变所有受影响的tasks sequences。

但这种方法似乎不够优雅。有没有人知道我应该怎么做?

谢谢罗布

最佳答案

使用 Comparator,这是用于非自然排序的 Java 接口(interface)。

public TaskSequenceComparator implements Comparator<Task> {

public int compare(Task one, Task two) {
return one.getSequence() - two.getSequence();
}

}

...

List<Task> tasks = ...;
Collections.sort(tasks, new TaskSquenceComaprator());
// tasks is now sorted by sequence.

您可以创建多个Comparator 类来实现每种支持的排序。然后,当您需要以特定方式对列表进行排序时,您可以从中进行选择。

关于java - 如何重新排序对象列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11086913/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com