Ajuda com um sort de ArrayList<ArrayList<Object>>

5 respostas
paolobacci

Oi, tenho uma tabela desse tipo ArrayList<ArrayList> table, que cada indice de table é uma row e cada row tem n elementos e
para passar essa tabela para um csv eu preciso ordenar os rows pelo indice 0.

exemplo:

table[row1,row2,row3]
row1[0.5,data,valor]
row2[0.0,data,valor]
row3[1.0,data,valor]

a saida impressa tem que ser row2,row1,row3 para se ter 0.0, 0.5 e 1.0 (sequencial).
Nao estou sabendo fazer esse sort de ArrayList dentro de ArrayList

Agradeco desde ja.

5 Respostas

M

Olhe em http://java.sun.com/j2se/1.5.0/docs/api/java/util/Arrays.html metodo sort(T[] a, Comparator<? super T> c)

paolobacci

Mas como eu passo um array se eu qro comparar entre arrays?
nenhum sort tem esses parametros

ctosin

Olá,

O método sort() pode receber um objeto que implementa a interface Comparator. Criando uma classe que implementa esta interface, você pode escrever a forma de ordenação que você quiser.

Dá uma olhada no Javadoc: http://java.sun.com/j2se/1.5.0/docs/api/java/util/Comparator.html

Abraço!

M

perfeito

paolobacci

Obrigado pela ajuda, fiz aqui. Segue como ficou.

abs

/**
 * comparador para ordenar a tabela
 * 
 * @author paolo
 */
class Compare implements Comparator<Object> {

  /**
   * construtor
   */
  public Compare() {
  }

  /**
   * @param arg0
   * @param arg1
   * @return Returns a negative integer, zero, or a positive integer as the
   *         first argument is less than, equal to, or greater than the second.
   */
  public int compareDate(Date arg0, Date arg1) {
    long l0 = arg0.getTime();
    long l1 = arg1.getTime();
    if (l0 > l1)
      return 1;
    if (l0 == l1)
      return 0;
    return -1;
  }

  /**
   * @param arg0
   * @param arg1
   * @return Returns a negative integer, zero, or a positive integer as the
   *         first argument is less than, equal to, or greater than the second.
   */
  public int compareDouble(Double arg0, Double arg1) {
    return arg0.compareTo(arg1);
  }

  /**
   * {@inheritDoc}
   */
  @Override
  public int compare(Object o1, Object o2) {
    if (o1 instanceof Double && o2 instanceof Double)
      return compareDouble((Double) o1, (Double) o2);
    Date d1 = Util.stringToDate((String) o1, Util.DEFAULT_DATE_FORMAT);
    Date d2 = Util.stringToDate((String) o2, Util.DEFAULT_DATE_FORMAT);
    return compareDate(d1, d2);
  }
}
Criado 29 de abril de 2010
Ultima resposta 29 de abr. de 2010
Respostas 5
Participantes 3