Sort de ArrayList<ArrayList<String>> com comparator

4 respostas
K

Olá Pessoas,

Tenho uma tabela do ResultSet com 7 colunas. Estou querendo ordenar esta tabela usando uma das colunas. Veja o codigo abaixo que nâo funciona.

private class CompareByNameCol implements Comparator {

int columnIndex;

public CompareByNameCol(int columnIndex){

this.columnIndex = columnIndex;

}
public int compare(Object o1, Object o2) {
		String[] s1 = (String[]) o1;
		String[] s2 = (String[]) o2;
		
		if(s1[columnIndex].compareTo(s2[columnIndex]) == 0)
			return 0;
		return s1[columnIndex].compareTo(s2[columnIndex]);
	}		
}

4 Respostas

E

Você não pode fazer um cast de ArrayList para String[].

E

Dando um exemplo.

package guj;

import java.text.Collator;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Locale;

public class ExemploArrayListDeArrayList {

    static class ComparatorListString implements Comparator<List<String>> {
        public ComparatorListString(int column) {
            this.column = column;
        }
        @Override
        public int compare(List<String> o1, List<String> o2) {
            return collator.compare(o1.get(column), o2.get(column));
        }
        private int column;
        private Collator collator = Collator.getInstance(new Locale("pt", "BR"));
    }
    
    public static void printMatriz (String cabecalho, List<List<String>> matriz) {
        System.out.println (cabecalho);
        for (List<String> linha : matriz) {
            for (String elemento : linha) {
                System.out.print (elemento + ", ");
            }
            System.out.println();
        }
    }
    
    public static void ordenarMatriz (List<List<String>> matriz, int coluna) {
        Collections.sort (matriz, new ComparatorListString(coluna));
    }
    
    public static void main(String[] args) {
        // Este é o jeito correto de declarar uma variável que irá conter
        // um ArrayList de ArrayList. 
        List<List<String>> matriz = new ArrayList<List<String>>();
        String[][] exemplo = {
            {"domingo", "segunda", "terça", "quarta", "quinta", "sexta", "sábado"},
            {"Linggo", "Lunes", "Martes", "Miyerkules", "Huwebes", "Biyernes", "Sabado"},
            {"diman&#265;o", "lundo", "mardo", "merkredo", "&#309;a&#365;do", "vendredo", "sabato"},
            {"Snein", "Moandei", "Tiisdei", "Woansdei", "Tongersdei", "Freed", "Saterdei"},
        };
        // Preenchendo nosso arraylist de arraylist...
        for (String[] linha : exemplo) {
            List<String> alLinha = new ArrayList<String>();
            for (String elemento : linha) {
                alLinha.add(elemento);
            }
            matriz.add (alLinha);
        }
        // Imprimindo a matriz antes da ordenação
        printMatriz ("---- Matriz original ----", matriz);
        // Agora fazendo a ordenação pela coluna 2 (terceira coluna)
        ordenarMatriz (matriz, 2);
        printMatriz ("---- Matriz ordenada pela terceira coluna ----", matriz);
        // Agora fazendo a ordenação pela coluna 6 (última coluna)
        ordenarMatriz (matriz, 6);
        printMatriz ("---- Matriz ordenada pela última coluna ----", matriz);
    }

}
K

Muito obrigado.

K

Olá Pessoas,

Como posso alinhar as colunas na saída.

Obrigado.

Criado 17 de novembro de 2010
Ultima resposta 17 de nov. de 2010
Respostas 4
Participantes 2