Java Comparator多个参数

时间:2012-02-16 12:07:11

标签: java comparator

我正在尝试在自定义类型上创建比较器。

Type {
    int state = 0; // can be 0 or 1
    String name = ""; // can be anything
}

我正在尝试对列表进行排序,首先,列表顶部是具有一个状态的项目,而另一个状态则是底部。

在第二步中,两个部分(第1部分:状态0,第2部分:状态1)中的项目按字母顺序排序。

我试过这个:

    @Override
    public int compare(Type i1, Type i2) {
        boolean a = i1.state == 1;
        boolean b = i2.state == 1;
        if (a && b) {
            return i1.name.compareTo(i2.name);
        } else if (a && !b) {
            return 1;
        } else {
            return -1;
        }
    }

但是项目随着每个项目状态的变化而随机化。

列出这些项目:

name : A B C D E F G H I J K
state: 1 0 1 1 0 1 0 0 1 1 0

应该像这样列出:

B 0
E 0
G 0
H 0
K 0
A 1
C 1
D 1
F 1
I 1
J 1

有人知道如何解决它吗? 感谢

2 个答案:

答案 0 :(得分:3)

当两个状态等于零时,您的代码会中断。您可以使用此条件修复它

if (a == b) ...

而不是

if (a && b)

...或者试试这个:

@Override
public int compare(Type i1, Type i2) {
    int res = i1.state - i2.state;
    if (res == 0) {
        return i1.name.compareTo(i2.name);
    } else {
        return res;
    }
}

答案 1 :(得分:0)

为什么不实施Comparable并在compareTo方法中使用相同的逻辑?