Preciso criar uma função que recebe uma lista já ordenada e quantidade de colunas para imprimir.
ex1: 5 colunas e a lista = [1,2,3,4,5,6,7]
Se eu imprimir esta lista. Sai assim:
1 2 3 4 5
6 7
Preciso que imprima assim:
1 3 5 7
2 4 6
ou seja, para conseguir imprimir assim, preciso que a lista esteja ordenada deste jeito: [1,3,5,7,2,4,6].
Então preciso criar uma função generica que retorna a lista já ordenada para impressão e passe por parametro a lista e o numero de colunas para impressão.
ex2:
List [1,2,3,4,5,6]. 2 Colunas
1 4
2 5
3 6
Lista ordenada = [1,4,2,5,3,6].
ex3:
List [1,2,3,4,5,6,7,8,9,10]. 3 Colunas
1 5 8
2 6 9
3 7 10
4
Lista ordenada = [1,5,8,2,6,9,3,7,10,4].
Entenderão o que é para fazer???
O mais perto que consegui fazer é se o numero de registro da lista for divisível pelo numero de colunas(ex2). Ai funciona. Porém se manda com numero quebrado(ex1, ex2), ai ele ordena para ordem inicial dnvo ‘-’
Codigo:
public static <T> List<T> quebrarLista(List<T> lst, int numeroQuebra) {
int numeroRegistro = Math.round(lst.size()/numeroQuebra);
List<List<T>> arrays = new ArrayList<List<T>>();
int indice1 = 0;
int indice2 = numeroRegistro;
for (int i = 0; i < numeroQuebra; i++) {
arrays.add(new ArrayList<T>(lst.subList(indice1, indice2)));
indice1 = indice2;
indice2 = indice2 + numeroRegistro;
}
List<T> lstNaoContem = new ArrayList<T>(lst);
for (List<T> list : arrays) {
lstNaoContem.removeAll(list);
}
for (int i = 0; i < lstNaoContem.size(); i++) {
arrays.get(i).add(lstNaoContem.get(i));
}
List<T> novo = new ArrayList<T>();
for (int i = 0; i < arrays.get(0).size(); i++) {
for (int j = 0; j < numeroQuebra; j++) {
if (arrays.get(j).size() > i ) {
novo.add(arrays.get(j).get(i));
}
}
}
return novo;
}