Re:Retornando o Maior Valor em um ArrayList[RESOLVIDO]

Boa Tarde, estou com o seguinte problema:possuo uma classe “Aluno” que contem os atributos —>Nome e Peso…e possuo outra Classe que chama-se “Controle de Peso”, a classe controle de peso possui um arraylist que adiciona elementos da classe aluno…gostaria de criar um método que retornasse o maior valor do atributo peso…

você podem me ajudar?

desde ja obrigado.

Faça uma variavel int maior e itere sua lista pegando os pesos dos alunos e se o peso for maior que a variavel vc altera, no final vc vai ter o maior peso entre os alunos, algo do tipo

metodo(){

int maior = 0;
para cada aluno no ArrayList{
se aluno.getPeso() > maior;
maior = aluno.getPeso();
}
return maior;
}
1 curtida

Collections.Max(collection c)

Esse retorna o maior elemento. Lembrar de ter um metódo equals implementado na Classe do objeto que estiver dentro da colection.

Outra forma mais complexa e talvez não melhor, usando comparators. A vantagem talvez seria de desacoplar os comparadores…

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Pesquisador {

private static final Comparator<Aluno> MENOR_PESO = new Comparator<Aluno>() { 
	public int compare(Aluno a1, Aluno a2) { return a1.peso - a2.peso;  }  };   
	
private static final Comparator<Aluno> MAIOR_PESO = new Comparator<Aluno>() {
	public int compare(Aluno a1, Aluno a2) { return a2.peso - a1.peso; }  };
	
private static final Comparator<Aluno> MENOR_IDADE = new Comparator<Aluno>() {
	public int compare(Aluno a1, Aluno a2) { return a1.idade - a2.idade; }  };

private List<Aluno> alunos = new ArrayList<Aluno>();

public Aluno busca(Comparator<Aluno> comparador) {
	if (alunos.isEmpty()) {
		return null;
	}
	Collections.sort(alunos, comparador);
	return alunos.get(0);
}

public static void main(String args[]) {
	Pesquisador p = new Pesquisador();
	
	p.alunos.add(new Aluno(39,20));
	p.alunos.add(new Aluno(40,19));
	p.alunos.add(new Aluno(60,26));
	p.alunos.add(new Aluno(70,45));
	p.alunos.add(new Aluno(55,61));
	p.alunos.add(new Aluno(61,13));
	
	System.out.println("Maior peso: [" + p.busca(MAIOR_PESO) + "].");
	System.out.println("Menor peso: [" + p.busca(MENOR_PESO) + "].");
	System.out.println("Menor idade: [" + p.busca(MENOR_IDADE) + "].");
	
}

}

class Aluno {
public int peso; // mudar para private com get/set
public int idade; // mudar para private com get/set

public Aluno(int peso, int idade) {
	this.peso = peso;
	this.idade = idade;
}

public String toString() {
	return "Aluno peso: " + peso + "; idade: " + idade;
}

}

Antes de mais nada, desculpe a demora pra responder, estava com uns problemas…

então, de acordo com a resposta do guisantogui, pleo que eu vejo, seria utilizado um loop for each correto???

eu testei e não funcionou(acho que fiz algo errado).
Eu usei a mesma logica passada por ele, porem usei um loop FOR…
o método ficou da seguinte maneira:

 public int retornarMaiorPeso()
    {
       
      int  maior = 0;  
      
         
        for(int i = 0;i< relacao_alunos.size(); i++)
        {  
        Aluno aluno = (Aluno) relacao_alunos.get(i);

                
                if(aluno.getPeso() > maior)
                { 
    
              
                maior = aluno.getPeso();  
                }  
        } 
     
        return maior;  
    }

as outras formas postadas aqui, ainda não tive tempo de testar…

Agradeço a todos pelo auxilio, Obrigado!