Java 比较器多参数

标签 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

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

最佳答案

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

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;
    }
}

关于Java 比较器多参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9310999/

相关文章:

java - 如果我在构造函数中抛出新的异常,那么每当我使用此构造函数时都必须捕获此异常吗?

java - onCreate 按预期被调用。但表没有创建

java - 使用 Comparator 根据多个字段的值比较对象

java - 使用比较器初始化 PriorityQueue

java - 在所有 Activity android中导入常用功能

java - 使用度数序列创建图形

java - 为什么 -1 右移 1 = -1 在 Java 中?

java - Java 中的集合排序

java - Collections.reverseOrder() 函数有什么作用?

java - Comparable 和 Comaprator 接口(interface)