Ordenar array list

7 respostas
F

ola pessoal

eu precisava de ajuda para ordenar esta lista por ordem de valores, começando nos mais altos

eu tenho estado a ler umas coisas mas ainda assim estou baralhado

esse codigo nao compila, alguem pode ajudar?

cumps

package sistema;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class Bank  implements comparable <CurrentAccount> {



    private String titular;
    private int numero;
   
    
    public int compareTo(CurrentAccount outro) {
        if (this.numero < outro.numero) {
            return -1;
        }
        if (this.numero > outro.numero) {
            return 1;
        }
        return 0;
    }
	
	
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		ShowAll();

	}




	public static void ShowAll() {
		// TODO Auto-generated method stub
		
		CurrentAccount conta1 = new CurrentAccount("Phillip Lahm", 5452);
		CurrentAccount conta2 = new CurrentAccount("Lucas Podolski", 1234);
		CurrentAccount conta3 = new CurrentAccount("Arne Friedrich", 3145);

		
		List<CurrentAccount> lista = new ArrayList<CurrentAccount>();
		lista.add(conta1);
		lista.add(conta2);
		lista.add(conta3);

		for (int i = 0; i < lista.size(); i++) {
			System.out.println(lista.get(i));
		}
		
		Collections.sort(lista);
	}



		 
	  










}
package sistema;

public interface comparable<T> {
    int compareTo(T outro);
}

7 Respostas

M

Esqueça essa tua interface comparable, é essa que você vai usar: http://download.oracle.com/javase/6/docs/api/java/lang/Comparable.html

A classe CurrentAccount deve implementar corretamente o método compareTo, implementando essa interface.

E então você vai simplesmente fazer uma chamada a Collections.sort() - http://download.oracle.com/javase/1.5.0/docs/api/java/util/Collections.html#sort(java.util.List)

F

voce pode ser mais especifico?

então pelo que eu percebi, estou a implementar mal a interface, ou seja quem a deve implementar é a classe CurrentAccount

correcto?

M

Isso, é a CurrentAccount que deve implementar a interface, e não esta que vc criou!
Ela deve implementar a interface java.lang.Comparable.

Feito isso, é só usar o Collections.sort(aTuaLista).

F

não consegui ainda

agora está gerando esse erro

Bound mismatch: The generic method sort(List) of type Collections is not applicable for the arguments (List). The inferred type CurrentAccount is not a valid substitute for the bounded parameter <T extends Comparable<? super T>>

a minha classe

package sistema;
import java.util.*;
import java.util.Collections;  
import java.util.List;  

class CurrentAccount extends Account implements comparable<CurrentAccount>{

    private String titular;
    private int numero;
   
    
    public int compareTo(CurrentAccount outro) {
        if (this.numero < outro.numero) {
            return -1;
        }
        if (this.numero > outro.numero) {
            return 1;
        }
        return 0;
    }
	


	public CurrentAccount(String accountN, double bal) {
		super(accountN, bal);
		// TODO Auto-generated constructor stub
		rate = 0.01;
		resultLong();
	}


	public String toString() {
		return "Conta à ordem: " + getAccountName() + ", saldo " + balanceMoney.format(getBalance())  + "?" +  ", Juros: " + decimals.format(resultLong) + "?";
	
	}



	

	@Override
	public void withdraw(double amount) {
		// TODO Auto-generated method stub

	}


	@Override
	public void deposit(double amount) {
		// TODO Auto-generated method stub
		
	}











}

a interface

package sistema;

public interface comparable<T> {
    int compareTo(T outro);
}
M

Mais uma vez: Esqueça essa classe comparable que vc criou, exclua ela. A interface que vc vai usar faz parte do pacote java.lang!

F

cara meu muito obrigado

ja está funcionando

ainda tenho uns warnings nao sei do que serão tenho de investigar

Comparable is a raw type. References to generic type Comparable should be parameterized

e este

Type safety: Unchecked invocation sort(List) of the generic method sort(List) of type Collections

por acaso nao sabe do que é isso?

class CurrentAccount extends Account implements java.lang.Comparable{


@Override
	public int compareTo(Object o) {
		// TODO Auto-generated method stub

	        if (this.getBalance() > ((Account) o).getBalance()) {
	            return -1;
	        }
	        if (this.getBalance() < ((Account) o).getBalance()) {
	            return 1;
	        }
	        return 0;
	    }

output

Conta à ordem: Phillip Lahm, saldo 5452?, Juros: 54,52 ?
Conta à ordem: Arne Friedrich, saldo 3145?, Juros: 31,45 ?
Conta à ordem: Lucas Podolski, saldo 1234?, Juros: 12,34 ?

F

esse problema ja esta resolvido

mais uma duvida pessoal, e penso que é a ultima

como posso realizar uma consulta ao arraylist?

com iterador? o ciclo for?

eu necessito que o usuario escreve o seu nome e aí va checar se ele exista na lista

muito obrigado

fica aqui o codigo

private static void up() {
		// TODO Auto-generated method stub
		
		Scanner sc = new Scanner(System.in);  
		System.out.println("Digite o nome da conta:");  
		String nconta = sc.next();  

		//---incompleto----
		
	}
	
//e aí ele deveria aceder a esta lista




public static void ShowAll() {
		// TODO Auto-generated method stub

		CurrentAccount conta1 = new CurrentAccount("Alberto Carlos", 1052);
		CurrentAccount conta2 = new CurrentAccount("Pedro Fonseca", 30);
		CurrentAccount conta3 = new CurrentAccount("Ricardo Vitor", 1534);
		CurrentAccount conta4 = new CurrentAccount("João Lopes", 3135);


		List<CurrentAccount> lista = new ArrayList<CurrentAccount>();
		lista.add(conta1);
		lista.add(conta2);
		lista.add(conta3);
		lista.add(conta4);

		Collections.sort(lista);
System.out.printf("Bank Accounts:" + "%n");
		Iterator<CurrentAccount> itr = lista.iterator();
		while (itr.hasNext()) {
			CurrentAccount element = itr.next();
			System.out.printf(element + " " + "%n");
		}
		System.out.println();
Criado 8 de dezembro de 2010
Ultima resposta 8 de dez. de 2010
Respostas 7
Participantes 2