Duvida Orientação/Lógica

Olá pessoal estou com um problema aqui vou tentar explicar da melhor forma possivel:

Eu tenho uma classe que se chama TabelaSalarial e os seguintes atributos dentro dela:

    private Long codigo;
    private Long idProjeto;
    private Long nivel;
    private String padrao; 
    private double acrescimo;
    private double valor;
    private double valorAjustado;
    private double valorHora;
    private String cargos;
    private String descricaoNivel;
    private String amplitude;

até ai tudo ok

só que eu busco do banco varias tabela e jogo dentro de um vetor

TabelaSalarial[] tabelasSalariais = facade.buscarTabelaSalarialsPorFiltros(null, projeto, null, null, null, null, null);

eu estou precisando pegar o maior e o menor “valorAjustado” de cada “Nivel”
com esses campos eu posso gerar a amplitude que é o (Maior/Menor)
Preciso de saber qual é a melhor forma de se fazer isso ou como fazer???

Obrigado a todos

Vc pode usar um HashMap…exemplo

Map<Long, Double> menor = new HashMap<>();
		Map<Long, Double> maior = new HashMap<>();
		
		for(TabelaSalarial t : seu_array) {
			
			Double menorArmazenado = menor.get(t.nivel);
			if (menorArmazenado > t.valorArmazenado) {
				menor.put(l, menorAtual);
			}
			
			Double maiorArmazenado = maior.get(t.nivel);
			if (maiorArmazenado < t.valorArmazenado) {
				maior.put(l, maiorAtual);
			}
		}

Giulliano obrigado pela colaboração

            Map<Long, Double> menor = new HashMap<Long, Double>();
            Map<Long, Double> maior= new HashMap<Long, Double>();
          
        for(TabelaSalarial t : seu_array) {  
              
            Double menorArmazenado = menor.get(t.nivel);  \\nessa linha ele pega um valor Null e me retorna erro
            if (menorArmazenado > t.valorArmazenado) {  
                menor.put(l, menorAtual);  \\passei o nivel como o Long
            }  
              
            Double maiorArmazenado = maior.get(t.nivel);  
            if (maiorArmazenado < t.valorArmazenado) {  
                maior.put(l, maiorAtual);  \\passei o nivel como o Long
            }  
        } 

Ele esta me dando um erro mesmo eu possuindo dados
Ele busca os valore e me retorna Null vc faz idei do que possa ser?
o codigo está assim


            Map<Long, Double> menor = new HashMap<Long, Double>();
            Map<Long, Double> maior= new HashMap<Long, Double>();

                for(TabelaSalarial t : tabelasSalariais) {  

                              
                            Double menorArmazenado = menor.get(t.getValorAjustado());  
                            if (menorArmazenado > t.getValorAjustado()) {  
                                menor.put(t.getNivel(), menorAtual);  
                            }  
                              
                            Double maiorArmazenado = maior.get(t.getValorAjustado());  
                            if (maiorArmazenado < t.getValorAjustado()) {  
                                maior.put(t.getNivel(), maiorAtual);  
                            }  
                        }  

onde o valor ajustado é o salario que eu preciso do maior e do menor por nivel
Obrigado!

Vou lhe mandar um exemplo de como você pode fazer, usando apenas o valorajustado… sem usar a parte de nível… você pode melhorar a lógica disto e usar…

classe Main

import java.util.ArrayList;
import java.util.List;

public class main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		// vamos supor que você faz uma consultar no banco, e retorne então um
		// ArrayList d objetos..
		// prefiro trabalhar desta forma, então é assim que vou lhe passar

		// list do java.util declarada para TabelaSalarial..
		// você pode ter a lista do tipo que você quiser, só precisa declarar..
		List<TabelaSalarial> tabela = new ArrayList<TabelaSalarial>();

		// declarando alguns objetos, somente para usarmos dentor da lista..
		// para exemplo.. você preenchera esta lista de forma diferente..
		TabelaSalarial salario1 = new TabelaSalarial();
		salario1.setValorAjustado(4.0);
		TabelaSalarial salario2 = new TabelaSalarial();
		salario2.setValorAjustado(4.0);
		TabelaSalarial salario3 = new TabelaSalarial();
		salario3.setValorAjustado(9.0);

		// adicionando na lista.
		tabela.add(salario1);
		tabela.add(salario2);
		tabela.add(salario3);

		// dentro da classes tabelasalarial está a função, então no caso tanto
		// faz qual tabela eu passar
		// para usarmos a função.. pois eu estou mandando a lista de onde ele
		// vai pegar..
		System.out.println(salario1.retornaMaior(tabela).getValorAjustado());
		System.out.println(salario1.retornaMenor(tabela).getValorAjustado());

	}

}

classe tabelasalarial

import java.util.List;

public class TabelaSalarial {
	private Long	codigo;
	private Long	idProjeto;
	private Long	nivel;
	private String	padrao;
	private double	acrescimo;
	private double	valor;
	private double	valorAjustado;
	private double	valorHora;
	private String	cargos;
	private String	descricaoNivel;
	private String	amplitude;

	public Long getCodigo() {
		return codigo;
	}
	public void setCodigo(Long codigo) {
		this.codigo = codigo;
	}
	public Long getIdProjeto() {
		return idProjeto;
	}
	public void setIdProjeto(Long idProjeto) {
		this.idProjeto = idProjeto;
	}
	public Long getNivel() {
		return nivel;
	}
	public void setNivel(Long nivel) {
		this.nivel = nivel;
	}
	public String getPadrao() {
		return padrao;
	}
	public void setPadrao(String padrao) {
		this.padrao = padrao;
	}
	public double getAcrescimo() {
		return acrescimo;
	}
	public void setAcrescimo(double acrescimo) {
		this.acrescimo = acrescimo;
	}
	public double getValor() {
		return valor;
	}
	public void setValor(double valor) {
		this.valor = valor;
	}
	public double getValorAjustado() {
		return valorAjustado;
	}
	public void setValorAjustado(double valorAjustado) {
		this.valorAjustado = valorAjustado;
	}
	public double getValorHora() {
		return valorHora;
	}
	public void setValorHora(double valorHora) {
		this.valorHora = valorHora;
	}
	public String getCargos() {
		return cargos;
	}
	public void setCargos(String cargos) {
		this.cargos = cargos;
	}
	public String getDescricaoNivel() {
		return descricaoNivel;
	}
	public void setDescricaoNivel(String descricaoNivel) {
		this.descricaoNivel = descricaoNivel;
	}
	public String getAmplitude() {
		return amplitude;
	}
	public void setAmplitude(String amplitude) {
		this.amplitude = amplitude;
	}

	// funcao que recebe a list de tabelas salariais, e retorna o objeto
	// que contém o maior valorajustado..
	// pegando todo o objeto, pode pegar o codigo dele, cargo,etc..
	public TabelaSalarial retornaMaior(List<TabelaSalarial> tabela) {

		TabelaSalarial maior = new TabelaSalarial();
		// declarando q o primeiro/onde vai começar a comparar é o primeiro da
		// list.
		// não estou testando aki se a tabela está cheia ou não, e nem se o
		// valor é valido (!= de null);
		// fazendo bem simples pra você pegar a lógica
		maior = tabela.get(0);

		// for para percorrer a lista
		for (TabelaSalarial ts : tabela) {
			// se encontra um maior ou igual, mudar substitui o objeto que vai
			// retornar.
			if (ts.getValorAjustado() >= maior.getValorAjustado())
				maior = ts;
		}

		return maior;
	}

	// funcao que recebe a list de tabelas salariais, e retorna o objeto
	// que contém o menor valorajustado..
	// pegando todo o objeto, pode pegar o codigo dele, cargo,etc..
	public TabelaSalarial retornaMenor(List<TabelaSalarial> tabela) {

		TabelaSalarial menor = new TabelaSalarial();
		// declarando q o primeiro/onde vai começar a comparar é o primeiro da
		// list.
		// não estou testando aki se a tabela está cheia ou não, e nem se o
		// valor é valido (!= de null);
		// fazendo bem simples pra você pegar a lógica
		menor = tabela.get(0);

		// for para percorrer a lista
		for (TabelaSalarial ts : tabela) {
			// se encontra um menor ou igual, mudar substitui o objeto que vai
			// retornar.
			if (ts.getValorAjustado() <= menor.getValorAjustado())
				menor = ts;
		}

		return menor;
	}

}

saida:

[quote]9.0
4.0[/quote]

espero que ajude pelo menos com a lógica…
abraço!

clarel.filho muito obrigado por sua explicação
porém debuguei esse codigo e occorreu o seguinte ele realmente pega o maior e o menor porem ele pega o maior e o menor de todas as tabelas e eu preciso por nivel!
Voce faz ideia de como implementar?
Novamente obrigado pela atenção!

            Projeto projetoSessao = (Projeto)request.getSession().getAttribute("projetoSessao");
            Long projeto = projetoSessao.getCodigo();
            
            TabelaSalarial[] tabelasSalariais = facade.buscarTabelaSalarialsPorFiltros(null, projeto, null, null, null, null, null);
            TabelaSalarialPrint tabelaSalarial;
            ArrayList tabelaPrint = new ArrayList ();
            
               
           
            List<TabelaSalarialPrint> tabela = new ArrayList<TabelaSalarialPrint>();
            
            for (int i = 0; i < tabelasSalariais.length; i++){
                tabelaSalarial = new TabelaSalarialPrint();
           
                tabelaSalarial.setNivel(tabelasSalariais[i].getNivel());
                tabelaSalarial.setPadrao(tabelasSalariais[i].getPadrao().toString());
               
                if (tabelasSalariais[i].getValorAjustado() > 0){
                    tabelaSalarial.setValorAjustado(tabelasSalariais[i].getValorAjustado());
                    
                  
                }
                else if(tabelasSalariais[i].getValor() > 0){
                    tabelaSalarial.setValorAjustado(tabelasSalariais[i].getValor());
                }
                else{
                    tabelaSalarial.setValorAjustado(0.0);
                }
                
                tabela.add(tabelaSalarial);
                      
                double maior=tabelaSalarial.retornaMaior(tabela).getValorAjustado();
                double menor=tabelaSalarial.retornaMenor(tabela).getValorAjustado();
                
                tabelasSalariais[i].setAmplitude(maior/menor);
                tabelaPrint.add(tabelaSalarial);
              
            }

Cara, você pode retornar uma lista então…
e dentro do método, fazer uma lógica que percorra a lista que enviou… separa ela por niveis… e após isto retorne a lista com o maior e menor de kda nivel…

OOOU
deixe a função como está, mas inves de mandar a lista com todos…
já manda a lista separada por níveis… ai já é meio caminho andado!

Abraço