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

标签 java

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

我有一个对象列表,这些对象有一个序列号,表示它们在 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/

相关文章:

java - 与 indexOf 一起使用 Comparable

java - 最好将某些内容存储在内存中还是尝试逐行写入文件?

java - 如何在 JTable 中的 cellrenderer 之外设置表格高度

java - XSSF。空指针异常

java - 在 Java 中生成 OAuth 签名

java - 与 SQL Server : login failed for user x 的 JDBC 连接

java - 输入字符串 "2013"的 NumberFormatException

java - 如何从泛型方法调用非泛型方法

java - 解释暴力算法

java - 显示 Activity 中的对象