Hola como puedo hacer para ordenar un arraylist de objetos por nombre? Intente el metodo de la burbuja pero no pasa nada

public void ordenar() {
Persona cambio;
boolean ordenado = true;
while (ordenado == true) {
ordenado = false;
for (int i = 0; i < personas.size() - 1; i++) {
if (personas.get(i).getNombre().compareTo(personas.get(i + 1).getNombre()) > 0) {
cambio = personas.get(i);
personas.set(i, personas.get(i + 1));
personas.set(i + 1, cambio);
ordenado = true;
}
}
}
}
Tu algoritmo funciona, ordena de manera ascendente que estarás haciendo cuando lo invocas? hagamosle caso a
NEBIREBean Persona
import java.util.Objects;
public class Persona {
private int edad;
private boolean esAlto;
private double peso;
return nombre;
}
public void setNombre
(String nombre
) { this.nombre = nombre;
}
public int getEdad() {
return edad;
}
public void setEdad(int edad) {
this.edad = edad;
}
return apellido;
}
public void setApellido
(String apellido
) { this.apellido = apellido;
}
public boolean isEsAlto() {
return esAlto;
}
public void setEsAlto(boolean esAlto) {
this.esAlto = esAlto;
}
public double getPeso() {
return peso;
}
public void setPeso(double peso) {
this.peso = peso;
}
@Override
public boolean equals
(Object o
) { if (this == o) return true;
if (!(o instanceof Persona)) return false;
Persona persona = (Persona) o;
return edad == persona.edad &&
esAlto == persona.esAlto &&
Double.
compare(persona.
peso, peso
) == 0 && Objects.equals(nombre, persona.nombre) &&
Objects.equals(apellido, persona.apellido);
}
@Override
public int hashCode() {
return Objects.hash(nombre, edad, apellido, esAlto, peso);
}
@Override
final StringBuilder sb = new StringBuilder("\nPersona");
sb.append("\nnombre='").append(nombre).append("\n");
sb.append(", edad=").append(edad);
sb.append(", apellido='").append(apellido).append("\n");
sb.append(", esAlto=").append(esAlto);
sb.append(", peso=").append(peso);
sb.append("]");
return sb.toString();
}
}
import java.util.*;
/**
* @rubn ,@NEBIRE, @Ana XD
*/
public class OrdenarPersonaPorNombre {
private List<Persona> personaList = new ArrayList<>();
private static final String TITLE
= "Personas Ordenadas Alfabeticamente...";
OrdenarPersonaPorNombre () {
fillList();
ordenar();
}
private void fillList() {
final Persona persona = new Persona();
persona.setNombre("Raul");
persona.setEdad(30);
persona.setApellido("Gonzales");
persona.setPeso(56);
final Persona persona2 = new Persona();
persona2.setNombre("Josefina");
persona2.setEdad(40);
persona2.setApellido("Sinforoza");
persona2.setPeso(60);
final Persona persona3 = new Persona();
persona3.setNombre("Ana");
persona3.setEdad(14);
persona3.setApellido("Begginer Web");
persona3.setPeso(45);
final Persona persona4 = new Persona();
persona4.setNombre("Babel");
persona4.setEdad(23);
persona4.setApellido("Bhahal");
persona4.setPeso(55);
final Persona persona5 = new Persona();
persona5.setNombre("Mega");
persona5.setEdad(100);
persona5.setApellido("Man");
persona5.setPeso(200);
personaList.add(persona);
personaList.add(persona2);
personaList.add(persona3);
personaList.add(persona4);
personaList.add(persona5);
}
//con java 7
private void ordenar() {
/* for(int f=0; f<personaList.size();f++) {
for(int c=0; c<(personaList.size() - 1) - f; c++) {
//personaList.size() -1, para evitar IndexOutBoundException
//que es una exception que se produce en tiempo de ejecucion por index fuera de rango
if(personaList.get(c).getNombre().compareTo( personaList.get(c+1).getNombre()) > 0) {
final String auxiliar = personaList.get(c).getNombre();
personaList.get(c).setNombre(personaList.get(c+1).getNombre());
personaList.get(c+1).setNombre(auxiliar);
}
}
}*/
for (int f=0; f<personaList.size(); f++) {
System.
out.
println(personaList.
get(f
)); }
}
//con java.util.Stream
private void ordenarConStreams() {
personaList.stream()
.
forEach(System.
out::println
);
}
public static void main
(String ...
blablabla) { new OrdenarPersonaPorNombre ();
}
}
Output_Personas Ordenadas Alfabeticamente...
Persona
nombre='Ana
, edad=14, apellido='Begginer Web
, esAlto=false, peso=45.0]
Persona
nombre='Babel
, edad=23, apellido='Bhahal
, esAlto=true, peso=55.0]
Persona
nombre='Josefina
, edad=40, apellido='Sinforoza
, esAlto=false, peso=60.0]
Persona
nombre='Raul
, edad=30, apellido='Gonzales
, esAlto=true, peso=56.0]
Process finished with exit code 0
Te he añadido en la linea 73 como hacer también con la clase Collections y su método sort
pero debemos implementar la interface Comparable<T>
cambiando a Persona
public class Persona implements Comparable<Persona> {
implementando al método public int compareTo(T o);
@Override
public int compareTo(Persona o) {
final Persona p1 = o;
return this.getNombre().compareTo(p1.getNombre());
}
Quedandoimport java.util.Objects;
public class Persona implements Comparable<Persona> {
private int edad;
private boolean esAlto;
private double peso;
return nombre;
}
public void setNombre
(String nombre
) { this.nombre = nombre;
}
public int getEdad() {
return edad;
}
public void setEdad(int edad) {
this.edad = edad;
}
return apellido;
}
public void setApellido
(String apellido
) { this.apellido = apellido;
}
public boolean isEsAlto() {
return esAlto;
}
public void setEsAlto(boolean esAlto) {
this.esAlto = esAlto;
}
public double getPeso() {
return peso;
}
public void setPeso(double peso) {
this.peso = peso;
}
@Override
public boolean equals
(Object o
) { if (this == o) return true;
if (!(o instanceof Persona)) return false;
Persona persona = (Persona) o;
return edad == persona.edad &&
esAlto == persona.esAlto &&
Double.
compare(persona.
peso, peso
) == 0 && Objects.equals(nombre, persona.nombre) &&
Objects.equals(apellido, persona.apellido);
}
@Override
public int hashCode() {
return Objects.hash(nombre, edad, apellido, esAlto, peso);
}
@Override
final StringBuilder sb = new StringBuilder("\nPersona");
sb.append("\nnombre='").append(nombre).append("\n");
sb.append(", edad=").append(edad);
sb.append(", apellido='").append(apellido).append("\n");
sb.append(", esAlto=").append(esAlto);
sb.append(", peso=").append(peso);
sb.append("]");
return sb.toString();
}
@Override
public int compareTo(Persona o) {
final Persona p1 = o;
return this.getNombre().compareTo(p1.getNombre());
}
}
Sino implementas a Comparable, no podrías usar la linea 73 en el bean OrdenarPersonaPorNombre