Que classe usar para ter uma lista ordenada por ordem alfabética [Resolvido]

6 respostas
F

Oi gente , tudo bem?
Eu tenho uma aplicação em android que le um arquivo json, e dele extrai (id e nome), porém cada vez que eu busco essa lista eu recebo em uma ordem diferente, porém eu gostaria de organiza-la

public static void createListGroup(ArrayList<String> friendsNames, 	ArrayList<String> friendsIds) { }

Eu tenho dois arraylists, um arraylist possui ids e o outro possui os nomes, como usar esses dois arraylists para criar uma nova lista com esses nomes organizados e sincronizados, ou seja, não posso ordenar as listas separadamente, pois cada id é ligado a um nome.

Devo usar algo como treeMap ou sortedMap?

Espero ter conseguido explicar meu problema, t+

6 Respostas

E

O jeito correto de fazer isso é ligar as duas coisas em uma única classe (que pode ser bem bobinha - não precisa nem ter setters nem getters).

Veja: <a href="http://developer.android.com/reference/java/util/Collections.html#sort%28java.util.List%3CT%3E,%20java.util.Comparator%3C?%20super%20T%3E%29">http://developer.android.com/reference/java/util/Collections.html#sort(java.util.List<T>,%20java.util.Comparator<?%20super%20T>)</a>

e

<a href="http://developer.android.com/reference/java/lang/String.html#compareToIgnoreCase%28java.lang.String%29">http://developer.android.com/reference/java/lang/String.html#compareToIgnoreCase(java.lang.String)</a>
class Friend {
    public String id;
    public String name;
}
...
public static void createListGroup(List<Friend> friends) {
    // obtém os amigos
    ...
    // ordena-os por nomes
    Collections.sort (friends, new Comparator<Friend>() {
         public int compare (Friend f1, Friend f2) {
             return f1.compareToIgnoreCase (f2);
         }
    });
}
F

valeu pela dica, vou tentar fazer e depois posto se consegui

caarlos0

Também tem o Google Guava Ordering que ajuda bastante e te provê uma DSL bacana para fazer ordenações.

http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/Ordering.html

F

Eu criei a classe Friend

public class Friend {
	public String id;  
    public String name; 
    public Friend(String idF,String nameF){
    	id=idF;
    	name=nameF;
    }
}

E adicionei os meus 2 arraylists de String a um novo arraylist de Friends

public static ArrayList<Friend> getTwitterFriends(
			ArrayList<String> friendsNames, ArrayList<String> friendsIds) {

		ArrayList<Friend> friend = new ArrayList<Friend>();
		for (int i = 0; i < friendsIds.size(); i++) {
			friend.add(new Friend(friendsIds.get(i),friendsNames.get(i)));
		}		 

		return friend;
	}

Até ai tudo bem, porém na hora de usar o metodo

Collections.sort (twitterFriends, new Comparator<Friend>() {  
	         public int compare (Friend f1, Friend f2) {  
	             return f1.compareToIgnoreCase (f2);  
	         }  
	    });

Ta falando para eu criar o metodo compareToIgnoreCase na classe friends?

Eu tenho que implementar a ordem dentro da classe friends? Como?

E

Ah, desculpe (sempre que eu esqueço de testar antes dá isso).

Qual é o campo que você deseja ordenar, é por nome ou por id?

Se for por nome, você teria algo como:

Collections.sort (twitterFriends, new Comparator<Friend>() {    
             public int compare (Friend f1, Friend f2) {    
                 return f1.name.compareToIgnoreCase (f2.name);    
             }    
        });

Se for por id, onde está escrito “name” escreva “id”. É só isso.

F

Valeu, agora funcionou perfeitamente, muito obrigado.

Criado 22 de agosto de 2012
Ultima resposta 23 de ago. de 2012
Respostas 6
Participantes 3