当前位置: 首页 > 知识库问答 >
问题:

合并两个比较器排序

赵嘉悦
2023-03-14

我有以下课程:

public class Orador {
  int id;
  int situacao;
  Expediente expediente;
}

public class Expediente {
  int id;
  int sequencia;
}
public class SequenciaExpedienteComparator implements Comparator<Orador> {
    @Override
    public int compare(Orador o1, Orador o2) {
        return o1.getExpediente().getSequencia().compareTo(o2.getExpediente().getSequencia());
    }
}

public class DiscursoRealizadoComparator implements Comparator<Orador> {
    @Override
    public int compare(Orador o1, Orador o2) {

        Integer situacaoOrador1 = ((Orador) o1).getSituacao().value();
        Integer situacaoOrador2 = ((Orador) o2).getSituacao().value();

        // situacao == 1 must be the first in the list
        if (situacaoOrador1 == 1) {
            return -1;
        }
        if (situacaoOrador2 == 1) {
            return 1;
        }
        return situacaoOrador1.compareTo(situacaoOrador2);
    }
}
Collections.sort(listaOradores, new SequenciaExpedienteComparator());
Collections.sort(listaOradores, new DiscursoRealizadoComparator());

共有1个答案

东郭腾
2023-03-14

你可以这样做,例如:

final static Comparator<Orador> comparator = new Comparator<Orador> {
    @Override
    public int compare(Orador o1, Orador o2) {
        if (o1.getSituacao() == 1) {
            return -1;
        }
        if (o2.getSituacao() == 1) {
            return 1;
        }
        int ret = Integer.compare(o1.getSituacao(), o2.getSituacao());
        if (ret != 0) {
            return ret;
        }
        return Integer.compare(o1.getExpediente().getSequencia(),
                               o2.getExpediente().getSequencia());
    }
}

我更改了代码以避免自动装箱(因为我讨厌它;-)

 类似资料:
  • 问题内容: 我有一个简单的类,其中包含一个字符串(名称)和一个整数(年龄)。应存储在集合中的对象不得具有双名值,并且应根据年龄的降序进行排序。第一个代码示例删除所有双精度名称,但不包含第二个排序条件: 下一个示例比较器将对其余对象集进行排序,该对象集不包含任何重复名称: 第二个比较器正确地根据对象的年龄值对它们进行排序,但是它允许使用重复名称,我不明白,因为外部if语句已经检查了两个对象的名称是否

  • 下一个示例比较器将对不包含任何双名的对象的其余集合进行排序: 第二个比较器正确地根据对象的年龄值对其进行排序,但它允许使用双重名称,我不明白这一点,因为外部的if-语句已经检查了两个对象的名称是否相等。为什么会这样?

  • 问题内容: 当给出两套时 s1 = {a,b,c,d} s2 = {b,c,d,a} (IE) 如何编写Sql查询以显示“ tableA和tableB中的元素相等”。[不使用SP或UDF] 输出 问题答案: 使用: 测试:

  • 问题内容: 我试图突出显示两个数据框之间到底发生了什么变化。 假设我有两个Python Pandas数据框: 我的目标是输出一个HTML表: 标识已更改的行(可以是int,float,boolean,string) 输出具有相同,OLD和NEW值的行(理想情况下,将其输出到HTML表中),以便使用者可以清楚地看到两个数据框之间的变化: id Name score isEnrolled Commen

  • 我已经阅读并理解了Mergesort的工作原理(作为文本),现在我正在尝试对其进行编码。我已经完成了分割数据的部分(我使用向量),直到它的每个大小都为1。现在我已经在Mergesort中为另一个所需部分编写了代码,我不知道该如何调用它,但我只是称它为“比较和排序部分”。 你有两个向量,这个部分应该比较最开始的元素,取较小的元素,然后删除选择的元素,把它放入一个新的向量中。这样做,直到两个向量的大小

  • 我想我可以做一个逐行和逐列的比较,但有没有更简单的方法?