Ajuda com RecordComparator

1 resposta
S

Olá a todos,
não consigo ordenar:

if (command == cListarCadTurma){

listaUpdCadTurma.deleteAll();

ComparadorCodigo comparador = new ComparadorCodigo();

listarRegistros(null,comparador);

}
private void listarRegistros(FiltroCodigo f, ComparadorCodigo c){

RecordEnumeration rEnum = null;

vecNomes.removeAllElements();

try{

rEnum = rsCadTurma.enumerateRecords(f,c,false);

int posicao = 0;

while(rEnum.hasNextElement()){

int id = rEnum.nextRecordId();

byte[] dados = rsCadTurma.getRecord(id);

ByteArrayInputStream BAIS = new ByteArrayInputStream(dados);

DataInputStream DIS = new DataInputStream(BAIS);

int codigoLido = DIS.readInt();

String nomeLido = DIS.readUTF();

NomesCadTurma itemAgenda = new NomesCadTurma(codigoLido, nomeLido, id, posicao);

vecNomes.addElement(itemAgenda);

posicao++;

}

gerarTela(vecNomes,rEnum.numRecords());

}

catch (Exception exc) {

mostrarAlerta(Erro na listagem,exc.toString());

}

finally {

rEnum.destroy();

}

}
class FiltroCodigo implements RecordFilter {

String nome;

int codigo;

public FiltroCodigo(int codigoFiltrado) {

codigo = codigoFiltrado;

}

public boolean matches(byte [] registro) {

try{

ByteArrayInputStream BAIS = new ByteArrayInputStream(registro);

DataInputStream DIS = new DataInputStream(BAIS);

int codigoLido = DIS.readInt();

String nomeLido = DIS.readUTF();

DIS.close();

BAIS.close();

if (codigo == codigoLido)

return true;

}

catch (Exception exc) {

mostrarAlerta(Erro FiltroNome, exc.toString());

}

return false;

}

}
class ComparadorCodigo implements RecordComparator {

public int compare(byte [] reg1, byte [] reg2) {

try{

ByteArrayInputStream BAIS = new ByteArrayInputStream(reg1);

DataInputStream DIS = new DataInputStream(BAIS);

int codigoLido1 = DIS.readInt();

DIS.close();

BAIS.close();
ByteArrayInputStream BAIS2 = new ByteArrayInputStream(reg2);
        DataInputStream DIS2 = new DataInputStream(BAIS2);
        int codigoLido2 = DIS.readInt();
        DIS2.close();
        BAIS2.close();

        if (codigoLido1 < codigoLido2){
            return PRECEDES;
        }
        if (codigoLido1 > codigoLido2){
            return FOLLOWS;
        }
        if (codigoLido1 == codigoLido2){
            return EQUIVALENT;
        }
    }
    catch (Exception exc) {
          System.out.println("Exceção: " + exc.getMessage());
    }
    return EQUIVALENT;
  }
}

1 Resposta

W
Eu fiz assim e deu certo e nessessario chamar[color=red] ordena = "Conta";[/color] no comado que foi determinado para listar os dados
 class Ordenar implements RecordComparator {

        String ordena = "Conta";

        public Ordenar(String ordena) {
            this.ordena = ordena;

        }

        public int compare(byte[] rec1, byte[] rec2) {
            try {
                String dado1, dado2;
                ByteArrayInputStream inputStream = new ByteArrayInputStream(rec1);
                DataInputStream dataStream = new DataInputStream(inputStream);

                dado1 = dataStream.readUTF();
                if (ordena.equals("Conta")) {
                    dado1 = dataStream.readUTF();
                }


                inputStream = new ByteArrayInputStream(rec2);
                dataStream = new DataInputStream(inputStream);
                dado2 = dataStream.readUTF();
                if (ordena.equals("Conta")) {
                    dado2 = dataStream.readUTF();
                }


                int resultado = dado1.compareTo(dado2);
                if (resultado == 0) {
                    return RecordComparator.EQUIVALENT;
                } else if (resultado < 0) {
                    return RecordComparator.PRECEDES;
                } else {
                    return RecordComparator.FOLLOWS;
                }

            } catch (Exception ERRO) {
                return RecordComparator.EQUIVALENT;
            }
Criado 23 de fevereiro de 2011
Ultima resposta 29 de abr. de 2011
Respostas 1
Participantes 2