一、组合字段
public class Person { private String name; private int age; private String gender; // 构造函数、getter和setter等省略 } List personList = new ArrayList(); personList.add(new Person("Alice", 20, "female")); personList.add(new Person("Bob", 25, "male")); personList.add(new Person("Charlie", 22, "male")); personList.add(new Person("Diana", 20, "female")); // 按照age升序排列,相同age根据gender降序排列,相同age和gender根据name升序排列 personList.sort( Comparator.comparingInt(Person::getAge) .thenComparing(Person::getGender, Comparator.reverseOrder()) .thenComparing(Person::getName) ); personList.forEach(System.out::println);
当需要按照多个字段进行排序时,需要使用thenComparing方法进行拼接。例子中先按照age进行排序,如果age相同,则按照gender进行降序排列,如果gender相同,则按照name升序排列。
二、JDK8 List分组
public class User { private String name; private int age; // 构造函数、getter和setter等省略 } List userList = new ArrayList(); userList.add(new User("Alice", 20)); userList.add(new User("Bob", 25)); userList.add(new User("Charlie", 22)); userList.add(new User("Diana", 20)); Map<Integer, List> ageMap = userList.stream() .collect(Collectors.groupingBy(User::getAge)); ageMap.forEach((age, list) -> { System.out.println("Age: " + age); list.forEach(user -> System.out.println(" " + user.getName())); });
使用stream和groupingBy方法可以对List进行分组操作。例子中按照age字段进行分组,结果为一个Map,key为age,value为User对象的List。
三、JDK8 List转Map
public class Student { private String name; private int id; // 构造函数、getter和setter等省略 } List studentList = new ArrayList(); studentList.add(new Student("Alice", 1)); studentList.add(new Student("Bob", 2)); studentList.add(new Student("Charlie", 3)); studentList.add(new Student("Diana", 4)); Map idNameMap = studentList.stream() .collect(Collectors.toMap(Student::getId, Student::getName)); idNameMap.forEach((id, name) -> System.out.println(id + ": " + name));
使用stream和toMap方法可以将List转换成Map。例子中将List转换成一个Map,key为id,value为name。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/301459.html