Clone a list in Java

Asked

Viewed 143 times

1

I have a class that reads a csv file and puts the table data on a list.

public class Gerenciador {


    public LinkedList<Acidentes> listAcidentes;

    public Gerenciador() {
        listAcidentes = new LinkedList<>();
    }

    public void readFile(String nomeArq) {
        try {
            Path path1 = Paths.get(nomeArq);

            BufferedReader reader = Files.newBufferedReader(path1, Charset.forName("utf8"));

            String line = reader.readLine();
            while ((line = reader.readLine()) != null) {
                line = line.replace(",", ".");
                String[] dados = line.split(";");

                //Variaveis para criação do objeto acidente
                String log1 = dados[1]; //Endereço 1
                String log2 = dados[2]; //Endereço 2

                int hora = Integer.parseInt(dados[30]); // Intervalo de hora cheia

                DiaNoite turno = null;                  //Verificação de dia ou noite
                if (dados[21].equalsIgnoreCase("NOITE")) {
                    turno = DiaNoite.NOITE;

                } else {
                    turno = DiaNoite.DIA;

                }

                String dia = dados[28]; //Dia do acidente
                String mes = dados[29]; //Mes do acidente
                String ano = dados[30]; //Ano do acidente


                Clima clima = null; //Verificação do clima (BOM/NULBADO/CHUVOSO)
                if (dados[23].equalsIgnoreCase("BOM")) {
                    clima = Clima.BOM;
                } else if (dados[23].equalsIgnoreCase("NUBLADO")) {
                    clima = Clima.NUBLADO;
                } else {
                    clima = Clima.CHUVOSO;
                }


                DiaSemana diaSemana = null; //Verificação do dia da semana do acidente
                switch (dados[8]) {
                    case "SEGUNDA-FEIRA":
                        diaSemana = DiaSemana.SEGUNDA;
                        break;
                    case "TERÇA-FEIRA":
                        diaSemana = DiaSemana.TERCA;
                        break;
                    case "QUARTA-FEIRA":
                        diaSemana = DiaSemana.QUARTA;
                        break;
                    case "QUINTA-FEIRA":
                        diaSemana = DiaSemana.QUINTA;
                        break;
                    case "SEXTA-FEIRA":
                        diaSemana = DiaSemana.SEXTA;
                        break;
                    case "SABADO":
                        diaSemana = DiaSemana.SABADO;
                        break;
                    case "DOMINGO":
                        diaSemana = DiaSemana.DOMINGO;
                        break;

                }

                //String tipoAcid = dados[5];
                TipoAcid tipoAcid = null;
                switch (dados[5]) {
                    case "CHOQUE":
                        tipoAcid = TipoAcid.CHOQUE;
                        break;
                    case "ABALROAMENTO":
                        tipoAcid = TipoAcid.ABALROAMENTO;
                        break;
                    case "COLISAO":
                        tipoAcid = TipoAcid.COLISAO;
                        break;
                    case "QUEDA":
                        tipoAcid = TipoAcid.QUEDA;
                        break;
                    case "ATROPELAMENTO":
                        tipoAcid = TipoAcid.ATROPELAMENTO;
                        break;
                    case "EVENTUAL":
                        tipoAcid = TipoAcid.EVENTUAL;
                        break;
                }

                double lat = Double.parseDouble(dados[35]); //Latitude
                double lon = Double.parseDouble(dados[36]); //Longitude
                GeoPosition pos = new GeoPosition(lat, lon); //Localização do acidente

                Dia d = new Dia(hora, turno, dia, mes, ano, clima, diaSemana); //Criação do dia, para criar um acidente
                Acidentes a = new Acidentes(log1, log2, d, tipoAcid, pos); //Criação do objeto acidente

                listAcidentes.add(a);

            }
        } catch (IOException x) {
            System.err.format("Erro de E/S: %s%n", x);
        }
    }



    @Override
    public String toString() {
        return super.toString();
    }

I need to clone the list for a class of tests, so I can manipulate that data, but I don’t know how to do that. I already tested the clone method and it didn’t work (or else I used it wrong)

  • The clone() works yes. Where you are using it?

2 answers

1

Try it this way

LinkedList segundaLista = new LinkedList(); 
segundaLista = (LinkedList) listAcidentes.clone(); 

1


Hello,

You want to clone the list for a test class, but if you make an instance of your class Gerenciador in your test class you will have list without the need to clone it.

I believe that it was not clear how this test you want to do, but anyway the clone() works. In your Manager class, you could do your method readFile return the list. Like this:

public LinkedList<Acidentes> readFile(String nomeArq) {

    try {

        // CÓDIGO DO SEU MÉTODO.

    } catch (IOException x) {
            System.err.format("Erro de E/S: %s%n", x);
      }
    return listAcidentes;
}

This way in the method call in another class you can clone the list and use in your test class:

//INSTÂNCIA DAS CLASSES
ClasseTeste classeTeste = new ClasseTeste();
Gerenciador gerenciador = new Gerenciador();

//LISTA ORIGINAL
LinkedList lista = gerenciador.readFile(nomeDoArquivo);

//CLONANDO A LISTA
LinkedList listaClonada = new LinkedList(); 
listaClonada = (LinkedList) lista.clone(); 

//UTILIZANDO A LISTA CLONADA NA CLASSE DE TESTES
classeTeste.testar(listaClonada);

I don’t know if this is really what you seek, I hope to have helped.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.