on It Road.com
Java 对流的多个字段进行排序
使用 thenComparing()创建能够按多个字段排序的 Comparator的示例。
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
public class Main
{
public static void main(String[] args)
{
ArrayList<Employee> employees = getUnsortedEmployeeList();
//Compare by first name and then last name
Comparator<Employee> compareByName = Comparator
.comparing(Employee::getFirstName)
.thenComparing(Employee::getLastName);
List<Employee> sortedEmployees = employees.stream()
.sorted(compareByName)
.collect(Collectors.toList());
System.out.println(sortedEmployees);
}
private static ArrayList<Employee> getUnsortedEmployeeList()
{
ArrayList<Employee> list = new ArrayList<>();
list.add( new Employee(2l, "JackLi", "Gupta") );
list.add( new Employee(1l, "JackLi", "Gussin") );
list.add( new Employee(4l, "BobRobert", "Sux") );
list.add( new Employee(5l, "Neon", "Piper") );
list.add( new Employee(3l, "Tomm", "Beckham") );
list.add( new Employee(7l, "JackLi", "Beckham") );
list.add( new Employee(6l, "BobRobert", "Suxena") );
return list;
}
}
为多个字段创建比较器
要对多个字段进行排序,我们必须首先为要对流进行排序的每个字段创建比较器。
然后按所需顺序链接每个比较器,以按对完整排序的影响进行分组。
//first name comparator Comparator<Employee> compareByFirstName = Comparator.comparing( Employee::getFirstName ); //last name comparator Comparator<Employee> compareByLastName = Comparator.comparing( Employee::getLastName ); //Compare by first name and then last name (multiple fields) Comparator<Employee> compareByFullName = compareByFirstName.thenComparing(compareByLastName); //Using Comparator - pseudo code list.stream().sorted( comparator ).collect();
日期:2020-09-17 00:09:27 来源:oir作者:oir
