可比较的是按降序排列而不是提升

时间:2014-02-01 16:19:50

标签: java sorting

所以,这可能只是我的一个逻辑错误,但我不确定如何。

@Override
public int compareTo( Activity t ) {
    // currently we're naturally sorting by created, description, uuid
    int createdComp = t.created.compareTo( created ); // created is an Instant

    if ( createdComp == 0 ) {
        int descComp = t.description.compareTo( description ); // description is a String
        if ( descComp == 0 ) {
            return t.id.compareTo( id ); // id is a UUID
        } else {
            return descComp;
        }

    }
    return createdComp;
}

这是我的调试代码,对于我没有放的代码,它使用相同的Instant,并且UUID是随机生成的。

    NavigableSet<Activity> ai = new TreeSet( Arrays.asList( i, g, h, f, a, b, c, e, d ) );

    assertEquals( ai.size(), 9, "NaviSet Size is 9" );

    for ( Activity act : ai ) {
        System.out.println( act );
    }

这是输出

1a8861eb-96c8-44ef-a9a5-ffbbeaf6b09e I 2014-02-01T16:00:42.102Z
3703a83c-04b4-4ed1-bdc6-b1da083900ea H 2014-02-01T16:00:42.102Z
1e68df32-18a5-4ce1-bb12-41dd3be97e3c G 2014-02-01T16:00:42.102Z
d73b0e03-fd01-4a70-a20f-500e2cf0b3dd F 2014-02-01T16:00:42.102Z
4aba5877-ed0e-4457-800c-522e3a2b72a3 E 2014-02-01T16:00:42.102Z
a90c7dae-ef9f-453b-9416-b7916ace4b5f D 2014-02-01T16:00:42.102Z
fdbfbb6b-d39b-4f15-a309-d105f0caa7a5 C 2014-02-01T16:00:42.101Z
2ed80ac0-768e-40c3-b03a-11b417e2893f B 2014-02-01T16:00:42.101Z
ef8b27db-6102-4ca5-8803-b63bea405be3 A 2014-02-01T16:00:42.098Z

为什么它们按降序排列?以及如何修复我的代码,以便它们默认按升序排列? (显然可导航的设置有asc / desc操作)

2 个答案:

答案 0 :(得分:6)

你的所有比较都颠倒了你的逻辑 逻辑应始终是&#34;这与#34;。

相比

例如,更改代码的这一行:

int createdComp = t.created.compareTo( created );

要:

int createdComp = created.compareTo(t.created);

答案 1 :(得分:1)

这是与作品相比的方式。

您应该将对象的值与传入值进行比较。

如果你反过来这样做,你就会以相反的顺序结束。

相关问题