Método proporcionado por Comparator
/ ** * @author GTR * @create 04/13/2020 - 16:12 * / público de clase Persona { privado String nombre; edad entera privada ; doble salario privado ; Persona pública (nombre de cadena, edad entera, salario doble) { super (); este .name = nombre; this .age = age; this .salary = salario; } public String getName () { return name; } vacío público setName (String name) { this .name = name; } public Integer getAge () { return age; } public void setAge (edad entera) { this .age = age; } public Double getSalary () { return salario; } public void setSalary (salario doble) { this .salary = salario; } @Override public String toString () { return"Persona [nombre =" + nombre + ", edad =" + edad + ", salario =" + salario + "]" ; } }
Implementación de clasificación
/ ** * @author GTR * @create 04/13/2020 - 16:14 * / público de clase _Comparator { Lista <persona> personList = nuevo ArrayList <> (); @Before public void before () { personList.add ( new Person ("hepengju", 28, 20000.0 )); personList.add ( nueva Persona ("lisi", 44, 40000.0 )); personList.add ( nueva Persona ("wangwu", 55, 50000.0 )); personList.add ( nueva Persona ("zhaoliu", 66, 60000.0 )); personList.add ( nueva Persona ("zhangsan", 33, 33333.0 )); personList.add ( nueva Persona ("zhangsan", 23, 30000.0 )); } // 按照 名字 排序 @Test public void test () { personList.stream (). Sorted (Comparator.comparing (Person :: getName)). ForEach (System.out :: println); // Persona [nombre = hepengju, edad = 28, salario = 20000.0] // Persona [nombre = lisi, edad = 44, salario = 40000.0] // Persona [nombre = wangwu, edad = 55, salario = 50000.0] // Persona [nombre = zhangsan, edad = 33, salario = 33333.0] // Persona [nombre = zhangsan, edad = 23, salario = 30000.0] // Persona [nombre = zhaoliu, edad = 66, salario = 60000.0] } // 按照 名字 排序 降序 @Test public void test4 () { personList.stream () .sorted (Comparator.comparing (Person :: getName) .reversed ()). forEach (System.out :: println); // Persona [nombre = zhaoliu, edad = 66, salario = 60000.0] // Persona [nombre = zhangsan, edad = 33, salario = 33333.0] // Persona [nombre = zhangsan, edad = 23, salario = 30000.0] // Persona [nombre = wangwu, edad = 55, salario = 50000.0] // Persona [nombre = lisi, edad = 44, salario = 40000.0] // Persona [nombre = hepengju, edad = 28, salario = 20000.0] } //Ordenar primero por nombre, ordenar por edad, ordenar por edad, ordenar por salario @Test public void test2 () { personList.stream (). Sorted (Comparator.comparing (Person :: getName) .thenComparing (Person :: getAge ) .thenComparing (Person :: getSalary)). forEach (System.out :: println); // Persona [nombre = hepengju, edad = 28, salario = 20000.0] // Persona [nombre = lisi, edad = 44, salario = 40000.0] // Persona [nombre = wangwu, edad = 55, salario = 50000.0] // Persona [nombre = zhangsan, edad = 23, salario = 30000.0] // Persona [nombre = zhangsan, edad = 33, salario = 33333.0 ] // Persona [nombre = zhaoliu, edad = 66, salario = 60000.0] } //4. Maneje todos los valores nulos (nulo hasta el final) @Test public void test3 () { // personList.add (null); personList.add ( new Person ( null , 33, 30000.0 )); personList.add ( new Person ("zhangsan", null , 30000.0 )); personList.add ( new Person ("zhangsan", 33, null )); personList.add ( new Person ( null , null , null )); personList.stream (). sorted (Comparator.comparing (Person :: getName, Comparator.nullsLast (Comparator.naturalOrder ())) .thenComparing (Person :: getName, Comparator.nullsLast (Comparator.naturalOrder ())) .thenComparing ( Persona :: getName, Comparator.nullsLast (Comparator.naturalOrder ())) ) .forEach (System.out :: println); // Persona [nombre = hepengju, edad = 28, salario = 20000.0] // Persona [nombre = lisi, edad = 44, salario = 40000.0] // Persona [nombre = wangwu, edad = 55, salario = 50000.0] // Persona [nombre = zhangsan, edad = 33, salario = 33333.0] // Persona [nombre = zhangsan, edad = 23, salario = 30000.0] // Persona [nombre = zhangsan, edad = nulo, salario = 30000.0] // Persona [nombre = zhangsan, edad = 33, salario = nulo] // Persona [nombre = zhaoliu, edad = 66, salario = 60000.0] // Persona [ nombre = nulo, edad = 33, salario = 30000.0] // Persona [nombre = nulo, edad = nulo, salario = nulo] }
// jdk8 lambda 排序
@Test
public void test5 () {
personList.stream (). sorted ((p1, p2) -> p1.getName (). compareTo (p2.getName ())) .forEach (System.out: : println);
// Persona [nombre = hepengju, edad = 28, salario = 20000.0]
// Persona [nombre = lisi, edad = 44, salario = 40000.0]
// Persona [nombre = wangwu, edad = 55, salario = 50000.0]
// Persona [nombre = zhangsan, edad = 33, salario = 33333.0]
// Persona [nombre = zhangsan, edad = 23, salario = 30000.0]
// Persona [nombre = zhaoliu, edad = 66, salario = 60000.0]
}
@Prueba
pública nulo test6 () {
personList.stream (). sorted ((p1, p2) -> p1.getAge () - p2.getAge ()) .forEach (System.out :: println);
// Persona [nombre = zhangsan, edad = 23, salario = 30000.0]
// Persona [nombre = hepengju, edad = 28, salario = 20000.0]
// Persona [nombre = zhangsan, edad = 33, salario = 33333.0]
// Persona [nombre = lisi, edad = 44, salario = 40000.0]
// Persona [nombre = wangwu, edad = 55, salario = 50000.0]
// Persona [nombre = zhaoliu, edad = 66, salario = 60000.0]
}
}