Ordenar um ArrayList?

Eu tenho um ArrayList de objetos com os seguintes atributos:

String nome;
int inicio;
int fim;

Eu gostaria de classificar o meu arrayList pelo número de inicio, como posso fazer isso? Alguem tem uma luz?

1 curtida

Tente isto:

http://java.sun.com/j2se/1.4.2/docs/api/java/util/Arrays.html

[quote]sort

public static void sort(Object[] a,
Comparator c)

Sorts the specified array of objects according to the order induced by the specified comparator. All elements in the array must be mutually comparable by the specified comparator (that is, c.compare(e1, e2) must not throw a ClassCastException for any elements e1 and e2 in the array).

This sort is guaranteed to be stable: equal elements will not be reordered as a result of the sort.

The sorting algorithm is a modified mergesort (in which the merge is omitted if the highest element in the low sublist is less than the lowest element in the high sublist). This algorithm offers guaranteed n*log(n) performance. [/quote]
1 curtida

Use o metodo sort() da classe Collections ( java.util.Collections ). Faca o seu Comparator e voila

Se tiver duvidas sobre como fazer um Comparador, uma pesquisa no google tras varios exemplos.

Rafael

1 curtida

É babinha. Só lembrar que você não precisa definir ambos os métodos da interface Comparator, só o “compare”.
Outra coisa é que o “compare” é obrigatoriamente “public int compare(Object o1, Object o2)”, se definir como “public int compare(Presidente p1, Presidente p2)” não funciona de jeito nenhum (nem compila).

[code]import java.util.Collections;
import java.util.ArrayList;
import java.util.Comparator;

class Presidente {
String nome;
int inicio;
int fim;
public Presidente(String n, int i, int f) {
nome = n; inicio = i; fim = f;
}
public String toString() {
return nome + ": de " + inicio + " até " + fim;
}
}

class Test126 {
public static void main(String[] args) {
ArrayList teste = new ArrayList();
teste.add (new Presidente (“Luis Inacio”, 2002, 2005));
teste.add (new Presidente (“Fernando Henrique”, 1998, 2001));
teste.add (new Presidente (“Fernando Henrique”, 1994, 1997));
Collections.sort (teste, new Comparator() {
public int compare(Object o1, Object o2) {
Presidente p1 = (Presidente) o1;
Presidente p2 = (Presidente) o2;
return p1.inicio < p2.inicio ? -1 : (p1.inicio > p2.inicio ? +1 : 0);
}
});
System.out.println (teste);
}
}[/code]

1 curtida

hehehe
mais de três anos depois e eu ainda apanhando com isso…
fiz questão de registrar no site só pra falar muito obrigado…
eu ainda tive um outro probleminha… no exemplo anterior foi usado int…
o meu é com String… vai como que fica em String(se é que num tem um jeito melhor, pelo menos pra mim esse deu certo…)

		 Collections.sort (blah, new Comparator() {  
			             public int compare(Object o1, Object o2) {  
			                 Categoria c1 = (Categoria) o1;  
			                 Categoria c2 = (Categoria) o2;  
			                 return c1.getNome().compareToIgnoreCase(c2.getNome());
			               }
		 	});

onde blah é um ArrayList de um objeto categoria, que tem um atributo nome( dae o .getNome ) que ja recebeu um monte de objeto de maneira aleatória…
thingol, valeu mesmo… essa sua “babinha” me ajudou muito…

1 curtida

Alguem pode me ajudar nesse codigo

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.lang.String;




/**
 *
 * @author wallison
 */
public class TestaOrdenacao {
    public class contas {
    
     public static void main(String[] args) {
    
                 List<ContaPoupanca> contas = new ArrayList<ContaPoupanca>();
                 ContaPoupanca c1 = new ContaPoupanca();
                 c1.setNumero(150);
                 contas.add(c1);

                 ContaPoupanca c2 = new ContaPoupanca();
                 c2.setNumero(100);
                 contas.add(c2);

                  ContaPoupanca c3 = new ContaPoupanca();
                  c3.setNumero(200);
                  contas.add(c3);
                                   
                  Collections.sort(contas);
                

     
  
    for(int i = 0; i < contas.size(); i++){ 
    ContaPoupanca cc = contas.get(i); 
    System.out.println(cc.getSaldo());
 } 

Da um erro no loop mas nao consigo descobrir…

Alguém sabe??

1 curtida

Tbm queria descobrir o erro desse codigo:

public class ContaCorrente extends Conta implements Comparable(ContaPoupanca) {

     public int compareTo(ContaPoupanca outra) {

      if (this.getNumero() < outra.getNumero()) {
return -1;
}

          if (this.getNumero() > outra.getNumero()) {
 return 1;

}



return 0;
}
}

Alguem saberia fazer ele rodar?