Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Como fazer a ordenação de uma List se o get da Lista é Collections.unmodifiableList(lista);

Como posso fazer a ordenação de uma lista pela classe de teste(main) se na classe da lista o seu get tem como instrução de somente leitura como esse abaixo?


public List<Aula> getAulas() {
        return Collections.unmodifiableList(aulas);
    }

public class TestaCurso {

public static void main(String[] args) {

    Curso javaColecoes = new Curso("Dominando as Collections", "Paulo Silveira");

    javaColecoes.adiciona(new Aula("Conhecendo as Collections", 25));
    javaColecoes.adiciona(new Aula("Montando as Collections", 20));
    javaColecoes.adiciona(new Aula("Utilizando List genérica", 15));

    System.out.println(javaColecoes.getAulas());

    javaColecoes.getAulas().sort(Comparator.comparing(Aula::getTempo));

    System.out.println(javaColecoes.getAulas());
}

}

public class Curso {

private String nome;
private String instrutor;
private List<Aula> aulas = new ArrayList<Aula>();

public Curso(String nome, String instrutor) {
    this.nome = nome;
    this.instrutor = instrutor;
}

public List<Aula> getAulas() {
    return Collections.unmodifiableList(aulas);
}

public void adiciona(Aula aula) {
    aulas.add(aula);
}

}

1 resposta
solução!

Oi Antonio, tudo bem?

Essa é uma questão que será resolvida na próxima aula! Mas, resumidamente, você pode passar essa "unmodifiableList" que retornou do get como parâmetro na instância de uma nova lista. Usando o código da próxima aula, ficaria assim:

public class TestaCurso2 {

    public static void main(String[] args) {

        Curso javaColecoes = new Curso("Dominando as coleções do Java",
                "Paulo Silveira");

        javaColecoes.adiciona(new Aula("Trabalhando com ArrayList", 21));
        javaColecoes.adiciona(new Aula("Criando uma Aula", 20));
        javaColecoes.adiciona(new Aula("Modelando com coleções", 22));

        System.out.println(javaColecoes.getAulas());

        List<Aula> aulasImutaveis = javaColecoes.getAulas();

        List<Aula> aulas = new ArrayList<>(aulasImutaveis);
        Collections.sort(aulas);
        System.out.println(aulas);
    }
}

Observe que nesse trecho do código, nós guardamos a lista imutável na referência aulasImutaveis e, em seguida, passamos ela como parâmetro na instância da nova ArrayList, fazendo com que uma cópia seja armazenada na referência aulas, que por sua vez pode ser ordenada sem, de fato, causar qualquer alteração na lista "original".

       List<Aula> aulasImutaveis = javaColecoes.getAulas();

        List<Aula> aulas = new ArrayList<>(aulasImutaveis);
        Collections.sort(aulas);
        System.out.println(aulas);

Espero ter ajudado, qualquer dúvida é só avisar!

Bons estudos!!