Min e Max LinkedhasMap

8 respostas
R

Olá, alguem sabe como posso achar o menor VALOR em uma LinkedHashMap? listMap<ID,VALOR>

8 Respostas

R

Ou em uma linkedlist pode ser também, mas nesta lista armazeno um objeto:

Class A {

public void setId(int id) ...

public void getId() ....

}

A a = new A();

... list.add(a);

}

Quero pegar o menor e o maior id armazanado nesta lista.

ViniGodoy

Faça um for na lista.

int menor = Integer.MAX_INTEGER;

for (A a : list) {
   if (menor < a.getId()) {
      menor = lista.get(i);
   }
}
return menor;

Se precisar de elementos naturalmente ordenados, sem repetição de ID, use um TreeMap ou um TreeSet. Aí vc terá métodos que retornam esses valores de maneira instantânea.

S

Esse metodo que voce sugeriu nao esta funcionando com linkedhashmap.

ViniGodoy

Impossível, poste seu código.

S

Não é necessario :D, o erro esta no list.get(i), variavel i nao declarada. Nao consigo entender esse for each. E esse exemplo é só com linkedlist, como estou utulizando linkedhashmap é necessario keyset, eu acho :smiley:

ViniGodoy

No for each, isso:

for (int i = 0; i < list.size(); i++) { A a = list.get(i); //Faz qualquer coisa }
É equivalente a isto:

for (A a : list) { //Faz qualquer coisa }

Lê-se "para cada objeto A na lista…"

S

Sou novato em java entao tenho duvidas quanto a utilização de algumas funções, pesquisando na internet achei a seguinte função

....
	int workload;
	String id;
	
	public int compareTo(Job o) {
		// TODO Auto-generated method stub
		return this.workload ==  o.workload ? 0 : ( this.workload > o.workload ? 1 : -1 ) ;
	}
.....

Poderia me explicar o que seria o que esta dentro da função compareTo

ViniGodoy

A regra do compareTo diz que:

  1. Você deve retornar < 0 se seu objeto for menor que o recebido por parâmetro;
  2. Você deve retornar 0 se os dois objetos forem iguais;
  3. Você deve retornar > 0 se o seu objeto for maior que o recebido por parâmetro.

É o que esse método faz.

O operador ternário funciona como uma espécie de if. Isso aqui:

String texto = x > 10 ? "Maior" : "Menor"; System.out.println(texto);

É o mesmo que:

String texto; if (x > 10) { texto = "Maior"; } else { texto = "Menor"; } System.out.println(texto);

Portanto, vê-se claramente que esse método retorna a comparação de acordo com a carga (workload) do Job.
É através desse comparador que classes como TreeSet e TreeMap ordenam os dados. Para mais informações leia:

Criado 13 de fevereiro de 2011
Ultima resposta 14 de fev. de 2011
Respostas 8
Participantes 3