Java对同一字段的项排序两次

时间:2017-02-01 12:55:52

标签: java sorting collections

我有一个项目表(SQL Server),每个项目都包含一个序列号(不是id)。序列可以是1,2,3,4等......项目表包含“链接”字段和“分组”字段。如果第2项有子项,这些子项将使用第2项的id填充链接字段,并且所有兄弟将拥有相同的分组代码。例如:

表项目

id     sequence     link        grouping
10      1            null        null
2       2            null        null
3       ..1           2           1
4       ..2           2           1 
36      ..3           2           1
4       3            null        null
25      4            null        null 
15      5            null        null

上表已经订购。我把点放在“序列”栏中,表明他们是孩子。我想通过java(强制使用Collections.sort)对此进行排序,但我不知道该怎么做。

编辑:我试过这个:

public class SequenceComparator implements Comparator<Item> {
    @Override
    public int compare(Item o1, Item o2) {
        String x1 = o1.getSequency().toString();
        String x2 = o2.getSequency().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);
        }
    }
}

1 个答案:

答案 0 :(得分:-2)

假设您有一个Item类,可能有帮助

实施Comparator类:

class ItemCompare implements Comparator<Item> {

    @Override
    public int compare(Item o1, Item o2) {
        // write comparison logic here like below , it's just a sample
        return o1.getID().compareTo(o2.getID());
    }
}

并使用它:

List<Item> items = new ArrayList<>();
ItemCompare itemCompare = new ItemCompare();
Collections.sort(items, itemCompare);

如果你使用的是java 8,你可以这样做:

Collections.sort(items, (Item r1, Item r2) ->
r1.getID().compareTo(r2.getID()));