[RESOLVIDO] List de POJO - retornar os menores valores das IDs do POJO

Bom dia pessoas,

Tenho uma List de uma classe minha, sendo que a classe tem dois atributos: distancia (int) e palavra (String), e carrego ela com mais de 260 000 linhas vindas do banco de dados (sendo cada linha um objeto do meu POJO, então add todos os objetos à List).

Vou colocar as classes pra ficar mais claro:


public class MeuObejto {

  private int distancia;
  private int palavra;
 
  // construtor, getters e setters
}

public class Logica {

  private List<MeuObjeto> lista = new ArrayList();

  //carrego os objetos MeuObjeto um por um com os dados do banco e add todos à minha lista

}

Até aí tranquilo.
O problema é: eu preciso ordenar essa lista, a partir do atributo distancia da classe MeuObjeto presenta na lista, um por um.

Vou dar um exemplo.

A lista tem os objetos com os seguintes valores:

INDICE        VALORES

[0]              distancia = 5 e palavra = "embotado";
[1]              distancia = 3 e palavra = "beócio";
[2]              distancia = 8 e palavra = "carcaju";
[3]              distancia = 1 e palavra = "texugo";

E eu preciso ordená-las assim:

INDICE        VALORES

[0]              distancia = 1 e palavra = "texugo";
[1]              distancia = 3 e palavra = "beócio";
[2]              distancia = 5 e palavra = "embotado";
[3]              distancia = 8 e palavra = "carcaju";

Ordenando pelo atributo distância dentro da classe MeuObejeto, que por sua vez estão todos dentro da List.
Tentei percorrer a lista toda aqui pra isso, mas como são 260 000 objetos dentro da List, e meu código de procura não estava lá dos melhores, em 10 minutos não havia terminado de reordenar ainda.

Alguma sugestão do que fazer? Existe algum método Java ou biblioteca pra isso?

Muito grato desde já, e a disposição pra qualquer esclarecimento.

Abraços!

Ah, me esqueci de um detalhe, eu apenas preciso retornar os dez primeiros objetos MeuObjeto da menor distancia, sem necessidade de reordenar toda a List original

Pode nos mostrar como está o select em que você carrega essa lista?

Olá Rafael Guerreiro, claro que sim.

PreparedStatement stmt = (PreparedStatement)connection.prepareStatement("select palavra from " +
                    "dicionario");

Ah, só pra constar, o atributo distância não vem do banco, e sim de um método meu baseado na distância de edição de Levenshtein.
Muito obrigado.

Então você itera entre todos os 260k registros setando o valor da distância.

E você está com problema SOMENTE na hora de ordenar?

Você pode fazer isso:

Collections.sort(lista, new Comparator&lt;MeuObjeto&gt;() {
	public int compare(MeuObjeto o1, MeuObjeto o2) {
		return o1.getDistancia() - o2.getDistancia();
	}
});

Mas eu tentaria calcular esse valor no banco de dados usando uma function e retornando apenas 10 linhas.

Exatamente isso Rafael Guerreiro!

Eu não conhecia esse método sort de Collection, tão pouco a interface Comparable. Vivendo e aprendendo.
Já testei aqui e funcionou, muito obrigado amigo!

E você tem toda razão, fazendo no banco já aliviaria muito a carga no conteiner.
Mas é para um trabalho acadêmico, e já estou estourando o prazo pra entrega.
Então mando assim mesmo, e faço no banco se der pra alterar depois.

Novamente muito obrigado, você sempre me ajuda por aqui, sou muito grato mesmo!
Abraços.