【发布时间】:2017-06-26 04:06:25
【问题描述】:
我有一个“Item”类,它包含以下字段(简而言之):id(与 SQL Server 上 Item 表的主键相关)、description、sequence(非空整数)和 link(a引用父对象的id),可以为null)
我想使用Java进行如下排序:
Id Sequence Link Description
1 1 null Item A
99 ..1 1 Son of A, first of the sequence
57 ..2 1 Son of A, second of the sequence
66 ..3 1 Son of A, third of the sequence
2 2 null Item B
3 3 null Item C
...
(我把点放在更好的可视化上)
也就是说,我希望某个项目的子项直接位于其父项的下方,按“序列”字段排序。
我尝试使用比较器,但失败了:
public class SequenceComparator implements Comparator<Item> {
@Override
public int compare(Item o1, Item o2) {
String x1 = o1.getSequence().toString();
String x2 = o2.getSequence().toString();
int sComp = x1.compareTo(x2);
if (sComp != 0) {
return sComp;
} else {
x1 = o1.getLink().toString();
x2 = o2.getLink() == null?"":o2.getLink().toString();
return x1.compareTo(x2);
}
}
}
我该怎么做?
【问题讨论】:
-
为什么不用SQL直接排序呢?实际上,这会更容易,因为您正在尝试按数字对项目进行排序
-
这是DAG。你正在寻找topological sort。
-
我需要在 Java 中执行此操作。这不是我的决定
-
您提供了许多有关不相关字段的详细信息,但没有提供重要的单个字段:序列。它看起来如何,点代表什么?
-
我认为这些点只是为了视觉表示。除了它是基于 SQL 的以外,我没有看到其他不相关的信息
标签: java sorting comparator