1
resposta

Número fixo de objetos em List

Boa noite.

Gostaria de saber qual seria a solução mais elegante para essa situação que tenho:

List<String> lista 1 = new ArrayList<String>();
List<String> lista 2 = new ArrayList<String>();

Possuo duas listas do mesmo tipo, que vão possuir um número variável de elementos.

Preciso juntar essas duas listas em uma única, respeitando as seguintes regras:

  • O número máximo de itens da lista unificada deve ser 20 elementos;
  • Os itens dentro da lista unificada deverão ser (10 últimos elementos da lista 1 + 10 últimos elementos da lista 2)
  • Se não houver 10 de cada (na lista 1 ou lista 2), devo preencher com as que existem (sempre pegando as mais recentes).
    • Exemplo: 19 últimos elementos da lista 1 + 1 elemento da lista 2 (considerando que a lista 2 só possua UM elemento).

Alguém tem alguma ideia?

1 resposta

Você pode criar um método que inverte a lista, visto que você precisa dos valores mais recentes. Em seguida verifica o tamanho da lista, e depois utiliza o "sublist" que te retorna uma lista dentro de um range definido.

Exemplo:

List<String> lista1 = new ArrayList<>();
        List<String> lista2 = new ArrayList<>();

        populaLista(lista1, 7);
        populaLista(lista2, 10);

        List<String> lista = new ArrayList<>();
        lista.addAll(valoresLista(lista1));
        lista.addAll(valoresLista(lista2));

        lista.forEach(System.out::println);

    }

    private static List<String> valoresLista(List<String> lista) {
        Collections.reverse(lista);
        if(lista.size() > 10){
            return lista.subList(0, 10);
        }
        return lista.subList(0, lista.size());
    }

    private static void populaLista(List<String> lista, int qtde) {
        for (int i = 0; i < qtde; i++) {
            lista.add(String.valueOf(i));
        }
    }