Когда-то давно, была статья про сортировку объектов:
https://user12vv.wordpress.com/2015/04/06/java-сортировка-объектов/

Но в Java8 это можно делать намного проще:

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

public class Main {
	
	
	public static List<Worker> getWorkers() {
		 List<Worker> workers = new ArrayList<>();      
         
		 workers.add(new Worker("Alan", 85, "alan4@gmail.com"));
		 workers.add(new Worker("Petrov", 30, "petrov@gmail.com"));
		 workers.add(new Worker("Sidorov", 55, "sidorov@gmail.com"));
		 workers.add(new Worker("Ivanov", 22, "ivanov@gmail.com"));
		 workers.add(new Worker("Alan", 37, "alan1@gmail.com"));
		 return workers;	
	}
	
	
	 public static void main(String args[]) {
	           
		 	List<Worker> workers = getWorkers();
	        System.out.println("dont sort");
	        System.out.println(workers);
	         
	        System.out.println("sort by name");
	      //  workers.sort((w1, w2) -> w1.getName().compareTo(w2.getName()));
	        workers.sort(Comparator.comparing(Worker::getName));
	        System.out.println(workers);
	         
	        System.out.println("sort by age");
	     
	        workers.sort(Comparator.comparing(Worker::getAge));
	        System.out.println(workers);
	         
	        System.out.println("sort by name and age");
	        workers.sort(Comparator.comparing(Worker::getName).thenComparing(Worker::getAge));
	        System.out.println(workers);
	 
	     
	    }
}


Код становится намного более простым. А все потому, что в интрефейс List добавили очень крутой метод sort, который на вход принимает компаратор:

 default void sort(Comparator<? super E> c)

Мы можем делать такие вещи — сортировать по имени, а потом и по возрасту(используем thenComparing):

 workers.sort(Comparator.comparing(Worker::getName).thenComparing(Worker::getAge));

Можно спросить, а как сделать сортировку в обратном порядке. Т.е. я хочу сортировку по возрасту выполнить по убыванию.
Опять же все примитивно, т.к. есть метод reversed:

System.out.println("sort by age reversed");	     
workers.sort(Comparator.comparing(Worker::getAge).reversed());
System.out.println(workers);
Реклама