Pessoal, tenho uma duvida que relativamente é simples, mas não consigo pensar em uma forma eficaz de contornar a exibição de uma especie de “breadCrumb” que estou criando para exibir as categorias de um sistema que estou desenvolvendo.
Abaixo segue o método em questão:
public String getCategoryNameBreadCrumb(Document doc) {
Collection<Object> cat = doc.getFieldValues("level_main_name");
String dados = "";
if(cat != null && cat.toArray() != null){
for (Object object : cat) {
dados += "|" + object.toString();
}
return dados;
}
return "";
}
O que acontece é que os valores que estão chegando estão ficando na ordem inversa do que na verdade precisa ser exibido:
|Pasta Suspensa|Pastas|Escritório
O correto seria ficar desta maneira:
Escritório|Pastas|Pasta Suspensa
Não estou conseguindo imaginar com posso resolver esse problema, creio que um laço for com iteração funcione, mas não consegui resolver.
Se alguém tiver alguma ideia ou comentário que posso me ajudar ficarei grato desde já!
[code] if(cat != null && cat.toArray() != null){
for (int i = -3; i < cat.size(); i–) {
}[/code]
Obrigado pela atenção e o tempo![/quote]
Camarada, de onde tu veio?
O método doc.getFieldValues(“level_main_name”) retorna o que?
Você pode alterá-lo para retornar uma LinkedList e garantir a ordenação dos registros.
Pode usar um ListIterator e iterar no sentido inverso (hasPrevious e previous).
Pode criar um for cujo índice seja inicializado com o size da Collection e vá decrementando.
seu problema realmente é básico, mas não é sobre seu código e sim sobre operadores.
No java o único operador sobrecarregado é o + (usado pra somar números E concatenar Strings).
quando vc faz
dados += "|" + object.toString();
seria o mesmo que
dados = dados + "|" + object.toString();
com isso vc está concatenando os nomes ao final da String, quando na verdade seu objetivo é concatenar no início.
Então temos o novissimo e sem teorias miraculosas de iteração inversa.
dados = object.toString() + "|" + dados;
Só uma observação sobre StringBuffer, esse cara é sincronizado (lento) e esse StringBuilder faz a mesma coisa, só que não é e com isso mais rápido.
as Strings em Java são imutáveis, então pra cada atribuição/concatenação vc vai criar um objeto no heap, agora com StringBuilder vc só cria um e vai alterando.