Interpretation function

1

How does this function stay without the for loop? using ObjectOutputStream?

private synchronized void adicionarListaContactosOnline(){
        Set<String> listaContactosOnline = new HashSet<String>();

        for(Map.Entry<String, ObjectOutputStream> mapa : utilizadores.entrySet()){
            listaContactosOnline.add(mapa.getKey());
        }

        Mensagem mensagem = new Mensagem();
        mensagem.setAccao(Accao.CONTACTOS_ONLINE);
        mensagem.setContactosOnline(listaContactosOnline);                                  

        for(Map.Entry<String, ObjectOutputStream> mapa : utilizadores.entrySet()){
            mensagem.setNomeClienteEnviaMensagem(mapa.getKey());
            try {
                System.out.println("Contacto Online: " + mapa.getKey());                
                mapa.getValue().writeObject(mensagem);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
    
asked by anonymous 13.12.2015 / 23:44

1 answer

3

Unlike this response , in this case there is no way to remove the for loop, since you need to iterate over all users to create a mensagem object for each.

The maximum you can do is to avoid two loops on the same HashMap, see below a modified version:

private synchronized void adicionarListaContactosOnline(){
        Set<String> listaContactosOnline = new HashSet<String>();

        for(Map.Entry<String, ObjectOutputStream> mapa : utilizadores.entrySet()){
            listaContactosOnline.add(mapa.getKey());

            Mensagem mensagem = new Mensagem();
            mensagem.setAccao(Accao.CONTACTOS_ONLINE);
            mensagem.setContactosOnline(listaContactosOnline);                                  
            mensagem.setNomeClienteEnviaMensagem(mapa.getKey());

            try {
                System.out.println("Contacto Online: " + mapa.getKey());                
                mapa.getValue().writeObject(mensagem);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
    
13.12.2015 / 23:56