/* ************************************************************ */ public List pesquisarEntreValores( List resultadoDaPesquisa, String nomeAtributoComparado, Comparator comparadorAtributo, Object valorInicial, Object valorFinal) { if (resultadoDaPesquisa != null) { // Configura o método get para obter os valores comparados String nomeMetodo = "get" + nomeAtributoComparado.substring(0, 1).toUpperCase() + nomeAtributoComparado.substring(1, nomeAtributoComparado.length()); // Ordena o resultado da pesquisa em ordem crescente dos valores do // atributo comparado: List resultado = new ArrayList(); resultado.addAll(resultadoDaPesquisa); Util.ordenarObjetos(resultado, comparadorAtributo); // Isola o conjunto de valores do atributo comparado em uma lista de // valores, que tem a mesma ordenação e tamanho da lista de objetos // do resultado da pesquisa: List valoresAtributoComparado = new ArrayList(); for (int i = 0; i < resultado.size(); i++) { valoresAtributoComparado.add(Util.executarMetodo(resultado.get(i), nomeMetodo, null)); } // Da lista de valores, recupera o primeiro que seja maior ou igual // a valorInicial: int indiceValorInicial = Collections.binarySearch(valoresAtributoComparado, valorInicial); if (indiceValorInicial < 0) { indiceValorInicial = -(indiceValorInicial + 1); } // Da lista de valores, recupera o último que seja menor ou igual a // valorFinal: int indiceValorFinal = Collections.binarySearch(valoresAtributoComparado, valorFinal); if (indiceValorFinal < 0) { indiceValorFinal = -(indiceValorFinal + 1); } else { indiceValorFinal++; } // Recupera os objetos entre indiceValorInicial e indiceValorFinal: resultado = resultado.subList(indiceValorInicial, indiceValorFinal); // Retorna os objetos que satisfazem aos critérios, caso existam if (resultado.size() > 0) { return resultado; } } return null; }
/** * Dado o resultado da pesquisa decorrente da chamada a 'pesquisar(...)' ou * 'pesquisarOrdenado(...)', e um objeto pertencente ao resultado dessa pesquisa, retorna o objeto * posterior. * * @param resultadoDaPesquisa o resultado da pesquisa decorrente da chamada a 'pesquisar(...)' ou * 'pesquisarOrdenado(...)'. * @param objetoAtual o objeto de referência para recuperação do objeto posterior * @return o objeto constante da lista na posição posterior ao do objeto informado @ */ public Object pesquisarProximoObjeto(List resultadoDaPesquisa, Object objetoAtual) { if (resultadoDaPesquisa != null && resultadoDaPesquisa.size() > 0 && objetoAtual != null) { if (resultadoDaPesquisa.get(0).getClass().equals(objetoAtual.getClass())) { Util.ordenarObjetos(resultadoDaPesquisa); int posicaoProximoObjeto = resultadoDaPesquisa.indexOf(objetoAtual) + 1; if (resultadoDaPesquisa.size() > posicaoProximoObjeto) { return resultadoDaPesquisa.get(posicaoProximoObjeto); } } else { throw new RuntimeException( "[pesquisarProximoObjeto] tipo do objeto diferente do tipo da lista."); } } return null; }