[quote=berg.pb]se tu só quer contar qtos tem cada grupo, é só fazer um for p imrpimri o length de cada array de membros
for (int i=0;i<grupos.length();i++){
System.out.println("Grupo " + i +" possui " + membros.length() + " membros");
}
[]s[/quote]
Berg, obrigado pela resposta… na verdade não é só isso que eu preciso… talves tenha me expressado mal…
Vou colocar um código fictício (que não compila), mas é onde posso por o problema:
int[] usrs = null;
//Percorrer o array do grupos
for(int i = 0; i < grupos.length; i++){
// Do grupo pegar a lista de usuários
Usuario[] usr = grupos[i].getUsuario();
//Percorrer a lista de usuarios
for(int j = 0; j< usr.length; j++){
//Pegar cada usuário
Usuario usr2 = usr[j];
// Aqui vc estará com o valor do array e vc faz o que quiser.
}
// Não compila... eh soh exemplo...
usrs += new int[usrs.length + usr2.length];
usrs += usr2;
}
// Aqui todos os Usuarios de todos os grupos
System.out.println("Qde.: " + usrs.length);
System.out.println("Nome do #3: " + usrs[3].getNome);
Obviamente esta última parte não compila… mas é onde estou em um impasse…
Se você vai acessar somente o array de Usuario, faça um for dentro de outro, como por exemplo:
// manja de for-each (enhanced-for)
for (Grupo gruop : grupos) { // percorre o vetor de grupos
for (Usuario user : group.membros) { // percorre o vetor de membros para cada grupo no vetor principal
System.out.printl(user.getNome());
}
}
Ou:
for (int i = 0; i < grupos.length; i++) {
for (int j = 0; j < grupos[i].length; j++) {
System.out.println(grupos[i].membros[j].getNome());
}
}
List<Usuario> listaDeUsuarios=new LinkedList<Usuario>();
for(Grupo grupo: seuArrayGrupo){
listaDeUsuarios.addAll(Arrays.asList(grupo.getUsuarios);
}
//aqui vc usa a lista para recuperar os dados que kiser....
O enhanced for é interessante, mas creio que fique na mesma situação, pois o que vou fazer com estes dados é inserir em uma JTable através de um DefaultTableModel(Object[] data, String[] columns), onde irei passar os dados de cada usuário em data.
Mas gostei da solução usando List… na verdade nunca trabalhei com Lists… mas pelo que vi parece ser o ideal e vai atender.
Quando eu terminar o projeto, irei postar ele OpenSource no dev.java! É um software de agendamento, onde suporta multiusuários, grupos , permissões por grupos e usuários, criação de eventos… implementando MVC.
List<Usuario> listaDeUsuarios=new LinkedList<Usuario>();
for(Grupo grupo: seuArrayGrupo){
listaDeUsuarios.addAll(Arrays.asList(grupo.getUsuarios);
}
Object[] arrayDeDados=listaDeUsuarios.toArray();
//use aqui os dados para popular deu DefaultTableModel
Como eu uso o SwingBean para popular e obter dados de minhas tabelas, eu nunca preciso transformar em array, sempre uso List mesmo.
meu código ficou assim, utilizando HashSet mas com um problema:
// Meu set de Permissoes de usuarios
HashSet<UserPermitionUser> setPermitionUsers = new HashSet<UserPermitionUser>();
// aqui percorre o array de permissoes de grupos
for (int i = 0; i < userInstancePermitions.length; i++) {
// por ciclo, cada grupo possui um array de Permissoes de usuarios, que aqui eh percorrido
for (int j = 0; j < userInstancePermitions[i].permitionUsers.length; j++) {
// AQUI O PROBLEMA: eu adiciono cada permissao de usuario
setPermitionUsers.add(userInstancePermitions[i].permitionUsers[j]);
}
}
// Aqui vao os Users IDs para fazer query no BD
uids = new int[setPermitionUsers.size()];
// Para percorrer as permissoes do usuarios
Iterator iterator = setPermitionUsers.iterator();
int i = 0;
while (iterator.hasNext()) {
// Aqui tras cada Permissao de usuario do iterator do set
UserPermitionUser eachUser = (UserPermitionUser) iterator.next();
// Cada Permissao de Usuario possui um getUidTarget, onde retorna o User ID alvo da permissao de cada usuario
uids[i] = eachUser.getUidTarget();
i++;
}
// Loop para exibir pelo SysOut
for (int i = 0; i < uids.length; i++) {
// Aqui deve exibir os usuarios que possuo permissao
System.out.println("User ID: " + uids[i]);
}
Um problema nesse código existe:
HashSet PROMETE que cada vez que você adiciona um Objeto, ele checa a existência de um igual antes de atribuí-lo, para não haver duplicidade… (pelo menos foi o que eu entendi).
Mas no meu caso, vêm um monte de Permissão de Usuário iguais!!
Sim, ele faz isso, desde que a classe do objeto implemente corretamente a interface Comparable ou que você passe um Comparator para ele realizar o trabalho.