Ordenar ArrayList ordem crescente

Preciso ordenar em ordem crescente uma lista de funcionarios pela idade.


Minha Classe Funcionario:

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

public class Funcionario {
	
	private List<Listagem> funcLista = new ArrayList<>();

	public Funcionario(){
		//vazio
	}

	public Funcionario(List<Listagem> funcLista){
		this.funcLista=funcLista;
	}

	public void addFuncionario(String nome, int idade, String situacao){
		Listagem listagem = new Listagem(nome, idade, situacao);
		funcLista.add(listagem);
	}
	public void addLivro(Listagem listagem){
		funcLista.add(listagem);
	}

	public void consultaFunc(String nome){
		for(int i = 0; i< funcLista.size(); i++){
			if(funcLista.get(i).getNome().equalsIgnoreCase(nome)){
				System.out.println("Nome: "+funcLista.get(i).getNome());
				System.out.println("Idade: "+funcLista.get(i).getIdade());
				System.out.println("Situacao: "+funcLista.get(i).getSituacao());
			}
		}
	}
	public void consulta(Listagem listagem){
		funcLista.get(0);
	}

	public void listaFunc(){
		for(int i = 0; i< funcLista.size(); i++){
			System.out.println("Nome: "+funcLista.get(i).getNome());
			System.out.println("Idade: "+funcLista.get(i).getIdade());
			System.out.println("Situacao: "+funcLista.get(i).getSituacao());
		}
	}

	public void listaFuncAtivo(){
		for(int i = 0; i< funcLista.size(); i++){
			if(funcLista.get(i).getSituacao().equalsIgnoreCase("ativo")){
				System.out.println("Nome: "+funcLista.get(i).getNome());
				System.out.println("Idade: "+funcLista.get(i).getIdade());
				System.out.println("Situacao: "+funcLista.get(i).getSituacao());
			}
		}
	}

	public void idadeCrescent(){

	for(int i = 0; i< funcLista.size(); i++){
			if(funcLista.get(i).getIdade()>i){
			System.out.println("Nome: "+funcLista.get(i).getNome());
			System.out.println("Idade: "+funcLista.get(i).getIdade());
			System.out.println("Situacao: "+funcLista.get(i).getSituacao());
			}
		}
	}	

}

-----------------------------------------------------------------------------------------------------------------------------------
**_Minha Classe Listagem:_**


public class Listagem {
	
	private String nome;
	private int idade;
	private String situacao;

	public Listagem(){
		//vazio
	}

	public Listagem(String nome, int idade, String situacao){
		this.nome=nome;
		this.idade=idade;
		this.situacao=situacao;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}
	public void setIdade(int idade) {
		this.idade = idade;
	}
	public void setSituacao(String situacao) {
		this.situacao = situacao;
	}

	public String getNome() {
		return nome.toUpperCase();
	}
	public int getIdade() {
		return idade;
	}
	public String getSituacao() {
		return situacao.toUpperCase();
	}

}

-----------------------------------------------------------------------------------------------------------------------------------
_**Minha Parte Principal:**_

import java.util.Scanner;

public class Principal {

	public static void main(String[] args) {
		
		Scanner entrada = new Scanner(System.in);
		Funcionario funcionario = new Funcionario();
		
		String nome, situacao;
		int opcao, idade;

		System.out.println("***Cadastro de Funcionarios***");
		do{
			System.out.printf("\n\tMenu\n\n");
			System.out.printf("1: Cadastrar Fucionario\n2: Consulta Funcionario\n3: Lista Funcionarios\n4: Funcionarios Ativos\n5: Funcionarios Pela Idade\n0: Sair\n");
			opcao=entrada.nextInt();

			if(opcao==1){
				System.out.println("\n\tCadastro de Funcionario\n");
				System.out.println("Nome do Funcionario: ");
				try{
				nome=entrada.next();
				System.out.println("Idade do Funcionario: ");
				idade=entrada.nextInt();
				System.out.println("Situacao do Funcionario: ");
				situacao=entrada.next();
				funcionario.addFuncionario(nome, idade, situacao);
				}catch(Exception e){
					System.out.println("Algo errado nao esta certo!");
				}
			}

			if(opcao==2){
				System.out.println("\n\tConsulta Funcionario\n");
				System.out.println("Nome do Funcionario: ");
				try{
				nome=entrada.next();
				funcionario.consultaFunc(nome);
				}catch(Exception e){
					System.out.println("Algo errado nao esta certo!");
				}
			}

			if(opcao==3){
				System.out.println("\n\tLista Funcionario\n");
				funcionario.listaFunc();
			}

			if(opcao==4){
				System.out.println("\n\tFuncionario Ativo\n");
				funcionario.listaFuncAtivo();
			}

			if(opcao==5){
				System.out.println("\n\tLista de Funcionario Pela Idade\n");
				funcionario.idadeCrescent();
			}

			if(opcao==0){
				System.out.printf("\nAte logo!");
			}

			if(opcao<0 || opcao>=6){
				System.out.println("Opção Invalida!");
			}

		}while(opcao!=0);

		entrada.close();
	}
}

Esta tudo funcionando como preciso, não é grande coisa, o que não esta funcionando é a parte do "public void idadeCrescente()…

ele mostra como uma lista, não esta ordenando.
Já tentei varias coisas, mas sou iniciante, então se alguém souber e puder me ajudar agradeço muito!!

Esse código vai te dar uma nova lista com as listagens ordenadas por idade, sem mexer na lista original:

List<Listagem> listagensOrdenadasPorIdade = listagens.stream()
    .sorted(Comparator.comparing(Listagem::getIdade))
    .collect(Collectors.toList());

Esse aqui vai alterar a lista original:

Collections.sort(listagens, Comparator.comparing(Listagem::getIdade));

Você pode simplificar bastante isso, fazendo com que a classe Listagem implemente a interface Comparable. Dessa forma não precisa criar um comparator usando Comparator.comparing.

1 curtida

show de bola, implementei essa parte e ficou assim. Funcionou 100% - Obrigado mesmo!!

public void idadeCrescent(){
	List<Listagem> listagensOrdenadasPorIdade = funcLista.stream()
		    .sorted(Comparator.comparing(Listagem::getIdade))
		    .collect(Collectors.toList());
	for(int i = 0; i< listagensOrdenadasPorIdade.size(); i++){
		System.out.println("Nome: "+listagensOrdenadasPorIdade.get(i).getNome());
		System.out.println("Idade: "+listagensOrdenadasPorIdade.get(i).getIdade());
		System.out.println("Situacao: "+listagensOrdenadasPorIdade.get(i).getSituacao());
	}

}