Tenho um objeto do tipo Iterator que esta recebendo os valores de um método que retorna os resultados encontrados de uma certa consulta.
Neste Iterator vem todos os resultados encontrados, só que vem de forma desordenada.
Então criei uma classe que estende a inteface Comparator para ordenar os resultados de acordo com o critério de ordenação que me foi passado.
Depois criei um ArrayList para receber os valores deste Iterator, para que depois de ordená-los, eu repassa-se ele de volta ao Iterator anterior.
Está funcionando corretamente esta parte de ordenação e depois de repassá-lo ao Iterator anterior.
Mas esta acontencendo o seguinte problema:
Ao debugar, verifiquei que o Iterator recebia 215 objetos de uma certa consulta que realizei, e quando chegou na parte de repassar os objetos ao ArrayList, depois de realizada a operação, o tamanho do ArrayList só tinha 208 objetos, ou seja está perdendo objetos durante esta etapa.
Gostaria da ajuda de vocês para saber o porquê que isso esta acontecendo.
Segue um pedaço do código abaixo:
[code]if (search) {
// The iterator of search results
Iterator results = null;
int numResults = 0;
// If the queryText is not null, set it's value in the query object. If
// it is null, check to see if we're filtering on a user. If so, we need
// to make "results" an iterator of messages posted by that user.
if (queryText != null) {
query.setQueryString(queryText);
results = query.results(); //Neste momento ele recebe 215 objetos do Tipo ForumMessage
//results = query.results(start,range);
numResults = query.resultCount();
}
else {
// If we're filtering on a user, make the results iterator a list
// of messages posted by that user
if (user != null) {
results = userManager.userMessages(user, start, range);
numResults = userManager.userMessageCount(user);
}
}
/*Início da alteração*/
ArrayList lista = new ArrayList();
ForumMessage m = null;
while(results.hasNext()) {
// The message that is the search result
m = (ForumMessage)results.next();
/*Verificar porque não esta recebendo todos os objetos*/
lista.add(m); //Aqui esta o problema, a lista só adiciona 208 objetos do Iterator results
}
ForumComparator comparator = new ForumComparator();
/*Ordenação usando o comparador pelos 3 campos*/
Collections.sort(lista, comparator);
numResults = lista.size();
int rangeIndex = start+range;
if(rangeIndex >= lista.size() )
rangeIndex = lista.size();
ArrayList l = new ArrayList(lista.subList(start, rangeIndex));
results = l.iterator();
/*Fim da alteração*/[/code]