Ordenando um objeto da classe ArrayList

Tenho um objeto chamado listaFornecedores que tem um campo String o qual eu gostaria de classificar em ordem alfabética. Tem algum método que faz essa classificação? Como é a sintaxe? Observação: eu quero que a lista inteira fique em ordem alfabética.

Atenciosamente,
Ronaldo

https://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/util/List.html#sort(java.util.Comparator)

1 curtida
1 curtida

Tem um problema o objeto listaFornecedores é um model da classe Fornecedores. Então ele tem vários “campos”.

O acesso ao campo é feito pelo getNome_razao(), este é o campo pelo qual quero ordenar o ArrayList listaFornecedores.

Como fica o código usando collections.sort(listaFornecedores.getNome_razao())? Não sei nem se isto existe. Será que eu tenho que fazer um trabalho mais braçal?

Atenciosamente,
Ronaldo

Vc acessou o link que passei, leu a mensagem do post owner, viu a solução e tudo o que eu escrevi?

2 curtidas

Então Fornecedores é uma classe e listaFornecedores é um ArrayList<Fornecedores>?

Se for isto mesmo, uma das formas de serguir o que o Staroski sugeriu, com Comparator, seria assim:

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

class Main {
  public static void main(String... args) {
    // Criei esta classe deste jeito simples apenas para teste.
    class Fornecedores {
      private String nome_razao;

      Fornecedores(String nome_razao) {
        this.nome_razao = nome_razao;
      }

      String getNome_razao() {
        return this.nome_razao;
      }

      @Override
      public String toString() {
        return this.nome_razao;
      }
    }

    // Aqui começa o exemplo que importa:
    List<Fornecedores> listaFornecedores = new ArrayList<>();

    listaFornecedores.add(new Fornecedores("bbb"));
    listaFornecedores.add(new Fornecedores("ccc"));
    listaFornecedores.add(new Fornecedores("aaa"));

    listaFornecedores.sort(Comparator.comparing(Fornecedores::getNome_razao));

    System.out.println(listaFornecedores);
  }
}

E se for implementar Comparable, como sugeriu o Buzatto, poderia ser algo assim:

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

class Main {
  public static void main(String... args) {
    class Fornecedores implements Comparable<Fornecedores> {
      private String nome_razao;

      Fornecedores(String nome_razao) {
        this.nome_razao = nome_razao;
      }

      @Override
      public int compareTo(Fornecedores other) {
        return this.nome_razao.compareTo(other.nome_razao);
      }

      @Override
      public String toString() {
        return this.nome_razao;
      }
    }

    List<Fornecedores> listaFornecedores = new ArrayList<>();

    listaFornecedores.add(new Fornecedores("bbb"));
    listaFornecedores.add(new Fornecedores("ccc"));
    listaFornecedores.add(new Fornecedores("aaa"));

    Collections.sort(listaFornecedores);

    System.out.println(listaFornecedores);
  }
}

Eu acredito que com o Comparator é melhor, principalmente porque vc ainda está entendendo este negócio de “ordem natural” e pode ser que conforme vc entender melhor, vc mude o seu conceito do que é a ordem natural dos seus fornecedores.

Se sua situação for diferente do que esta que eu entendi, mostra o código de Fornecedores e a parte onde vc declara listaFornecedores.

1 curtida

Mas é por isso que você precisa passar um objeto do tipo Comparator para o método sort da sua lista, esse Comparator deve utilizar o campo que você quiser para fazer a ordenação.

1 curtida

Entendi, usei sua linha de código Wellington Domiciano e funcionou no meu programa…
Muito obrigado!!!

Atenciosamente,
Ronaldo

1 curtida