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